<<set $returnPassage = passage()>>
<div class="dialogueBox"><div class="dialogueText">18+ Only!
All characters are 18+</div></div>
<div class="dialogueBox"><div class="dialogueText">By selecting Continue, you affirm that you meet the legal age requirement for accessing adult content in your region.</div></div>
Current version: 0.03 Public Release
If you'd like to support development, follow future updates, or help fund new content:
<a href="https://www.patreon.com/cw/opsmaser" target="_blank" rel="noopener noreferrer">Support Hexmoor Academy on Patreon</a>
[[Start Game|Continue]]
<<run $(document.body).append('<div id="questNotifications"></div>') >>
<<set $hairStyle = "">>
<<set $skinTone = "">>
<<set $hairColor = "">>
<<set $gender = "">>
<<set $eyeColor = "">>
<<set $height = 60>> <!-- stored as inches -->
<<set $bodyType = "">>
<<set $bloodstatus = "">>
<<set $house to "">>
<<set $breast to "">>
<<set $genitals to "">>
<<set $genitalSize = 4>>
<<set $gold = 0>>
<<set $showQuests = false>>
<<set $showInventory = false>>
<<set $showRelationships = false>>
<<set $inventory = []>>
<<set $inventoryQuantities = {}>>
<<set $quests = []>>
<<set $completedQuests = []>>
<<set $questIdCounter = 0>>
<<set $relationships = {}>>
<<set $petInfoPassage = "">>
<!-- COMBAT STATS -->
<<set $maxHealth = 100>>
<<set $health = 100>>
<<set $maxFocus = 100>>
<<set $focus = 100>>
<<set $maxGuard = 60>>
<<set $guard = 0>>
<<set $privateEncounter = null>>
<!-- Every spell the player can currently use -->
<<set $knownSpells = []>>
<!-- Current combat data -->
<<set $combat = null>>
<<set $questGiven_Lineage = false>>
<<set $robesDone = false>>
<<set $wandDone = false>>
<<set $booksDone = false>>
<<set $petsDone = false>>
<<set $generalEquipmentBought = false>>
<<set $starterAllowanceGiven = false>>
<<set $inheritanceGiven = false>>
<<set $settings = {
textSize: "default",
animatedColors: true,
neutralUnsorted: false,
magicCursor: true,
reducedMotion: false,
compactMode: false,
passageWidth: "default"
}>>
<<script>>
/* ---------------------------
ADD GOLD
--------------------------- */
window.addGold = function(amount) {
State.variables.gold += amount;
if (State.variables.gold < 0) State.variables.gold = 0;
};
/* ---------------------------
ADD ITEM TO INVENTORY
--------------------------- */
window.addItem = function(name, qty = 1) {
const inv = State.variables.inventory;
const q = State.variables.inventoryQuantities;
if (!inv.includes(name)) {
inv.push(name);
q[name] = qty;
} else {
q[name] += qty;
}
};
/* Ensure quest arrays exist */
if (!State.variables.quests) State.variables.quests = [];
if (!State.variables.completedQuests) State.variables.completedQuests = [];
/* ---------------------------
CREATE A QUEST
--------------------------- */
window.addQuest = function(title, description, steps) {
const quests = State.variables.quests;
// Avoid duplicates
if (quests.some(q => q.title === title)) return;
const quest = {
id: Date.now(), // unique
title: title,
description: description,
steps: steps, // array of strings
currentStep: 0, // index
status: "active"
}
quests.push(quest);
showQuestNotification("Quest Added: " + title);
};
/* ---------------------------
ADVANCE STEP IN A QUEST
--------------------------- */
window.advanceQuest = function (id) {
const v = State.variables;
let q = v.quests.find(q => q.id === id);
if (!q) return;
q.currentStep++;
if (q.currentStep >= q.steps.length) {
q.status = "complete";
v.completedQuests.push(q);
// remove from active
v.quests = v.quests.filter(x => x.id !== id);
showQuestNotification("Quest Complete: " + q.title);
}
Engine.play(passage());
};
/* ---------------------------
SHOW NOTIFICATION POPUP
--------------------------- */
window.showQuestNotification = function (text) {
const note = document.createElement("div");
note.className = "quest-notification";
note.innerText = text;
document.body.appendChild(note);
setTimeout(() => note.classList.add("show"), 50);
setTimeout(() => note.classList.remove("show"), 3000);
setTimeout(() => note.remove(), 3500);
};
/* ---------------------------
GOLD HELPERS
--------------------------- */
window.addGold = function (amount, reason) {
const v = State.variables;
if (typeof v.gold !== "number") {
v.gold = 0;
}
v.gold += amount;
if (v.gold < 0) v.gold = 0;
const sign = amount >= 0 ? "+" : "";
const message = reason
? `${sign}${amount} Gold — ${reason}`
: `${sign}${amount} Gold`;
if (window.showQuestNotification) {
showQuestNotification(message);
}
};
window.spendGold = function (amount, reason) {
const v = State.variables;
if (typeof v.gold !== "number") {
v.gold = 0;
}
if (v.gold < amount) {
// Not enough gold
if (window.showQuestNotification) {
showQuestNotification("Not enough gold.");
}
return false;
}
v.gold -= amount;
const message = reason
? `-${amount} Gold — ${reason}`
: `-${amount} Gold`;
if (window.showQuestNotification) {
showQuestNotification(message);
}
return true;
};
/* ---------------------------
RELATIONSHIP SYSTEM
--------------------------- */
window.addRelationship = function(name, age, type="human") {
const v = State.variables;
if (!v.relationships) v.relationships = {};
if (v.relationships[name]) return;
v.relationships[name] = {
name: name,
age: age,
type: type // NEW
};
if (window.showRelationshipNotification) {
showRelationshipNotification("Relationship Added: " + name);
}
};
window.updateRelationship = function(name, updates) {
const v = State.variables;
if (!v.relationships || !v.relationships[name]) return;
Object.assign(v.relationships[name], updates);
if (window.showRelationshipNotification) {
showRelationshipNotification("Relationship Updated: " + name);
}
};
/* ---------------------------
RELATIONSHIP NOTIFICATION
--------------------------- */
window.showRelationshipNotification = function (text) {
const note = document.createElement("div");
note.className = "quest-notification";
note.innerText = text;
document.body.appendChild(note);
setTimeout(() => note.classList.add("show"), 50);
setTimeout(() => note.classList.remove("show"), 3000);
setTimeout(() => note.remove(), 3500);
};
/* =========================================================
COMBAT - SPELL DATABASE
========================================================= */
setup.spells = {
ward: {
name: "Ward",
description: "Creates a temporary magical barrier.",
focusCost: 10,
target: "self",
effects: [
{
type: "guard",
amount: 15
}
]
},
trainingBolt: {
name: "Training Bolt",
description: "A harmless training projectile used for defensive practice.",
focusCost: 0,
target: "enemy",
effects: [
{
type: "damage",
amount: 12,
variance: 0.10,
guardInteraction: "normal"
}
]
},
emberBolt: {
name: "Ember Bolt",
description: "Launches a concentrated bolt of magical flame.",
focusCost: 12,
target: "enemy",
effects: [
{
type: "damage",
amount: 20,
variance: 0.10,
guardInteraction: "normal"
}
]
},
piercingSpark: {
name: "Piercing Spark",
description: "A precise arcane strike capable of slipping through magical protection.",
focusCost: 18,
target: "enemy",
effects: [
{
type: "damage",
amount: 16,
variance: 0.10,
guardInteraction: "pierce",
// 50% of damage ignores Guard
penetration: 0.50
}
]
}
};
/* =========================================================
COMBAT - COMBATANT DATABASE
========================================================= */
setup.combatants = {
trainingConstruct: {
name: "Training Construct",
maxHealth: 50,
maxFocus: 0,
maxGuard: 30,
spells: [
"trainingBolt"
],
control: "ai"
},
alexisVale: {
name: "Alexis Vale",
maxHealth: 90,
maxFocus: 100,
maxGuard: 50,
spells: [
"ward",
"emberBolt"
],
control: "ai"
},
hawthorneTraining: {
name: "Professor Clarissa Hawthorne",
maxHealth: 120,
maxFocus: 0,
maxGuard: 0,
spells: [
"trainingBolt"
],
control: "ai"
},
professorHawthorne: {
name: "Professor Clarissa Hawthorne",
maxHealth: 120,
maxFocus: 120,
maxGuard: 70,
spells: [
"ward",
"emberBolt",
"piercingSpark"
],
control: "ai"
}
};
/* =========================================================
LEARN SPELL
========================================================= */
window.learnSpell = function(spellId) {
const v = State.variables;
if (!setup.spells[spellId]) {
console.error("Unknown spell:", spellId);
return false;
}
if (!v.knownSpells.includes(spellId)) {
v.knownSpells.push(spellId);
const spell = setup.spells[spellId];
if (window.showQuestNotification) {
showQuestNotification(
"Spell Learned: " + spell.name
);
}
return true;
}
return false;
};
/* =========================================================
CREATE PLAYER COMBATANT
========================================================= */
window.createPlayerCombatant = function() {
const v = State.variables;
return {
runtimeId: "player",
templateId: "player",
name: v.name || "You",
team: "player",
control: "player",
health: v.health,
maxHealth: v.maxHealth,
focus: v.focus,
maxFocus: v.maxFocus,
guard: 0,
maxGuard: v.maxGuard,
spells: [...v.knownSpells],
statuses: [],
alive: true
};
};
/* =========================================================
CREATE NPC COMBATANT
========================================================= */
window.createCombatant = function(templateId, team, number) {
const template = setup.combatants[templateId];
if (!template) {
console.error(
"Combatant does not exist:",
templateId
);
return null;
}
return {
runtimeId:
templateId + "_" + number,
templateId: templateId,
name: template.name,
team: team,
control:
template.control || "ai",
health:
template.maxHealth,
maxHealth:
template.maxHealth,
focus:
template.maxFocus,
maxFocus:
template.maxFocus,
guard: 0,
maxGuard:
template.maxGuard,
spells:
[...template.spells],
statuses: [],
alive: true
};
};
/* =========================================================
START COMBAT
========================================================= */
window.startCombat = function(encounter) {
const v = State.variables;
const combat = {
active: true,
id:
encounter.id || "combat",
round: 1,
turnIndex: 0,
actors: [],
log: [],
pendingSpell: null,
objective:
encounter.objective || null,
successfulBlocks: 0,
victoryPassage:
encounter.victory,
defeatPassage:
encounter.defeat,
nextRuntimeId: 1
};
/* PLAYER IS ALWAYS ADDED */
combat.actors.push(
createPlayerCombatant()
);
/* ADD ALLIES */
const allies =
encounter.allies || [];
allies.forEach(function(id) {
const actor =
createCombatant(
id,
"player",
combat.nextRuntimeId++
);
if (actor) {
combat.actors.push(actor);
}
});
/* ADD ENEMIES */
const enemies =
encounter.enemies || [];
enemies.forEach(function(id) {
const actor =
createCombatant(
id,
"enemy",
combat.nextRuntimeId++
);
if (actor) {
combat.actors.push(actor);
}
});
v.combat = combat;
return true;
};
/* =========================================================
PRIVATE INTERACTION ACTIONS
========================================================= */
setup.privateActions = {
soloOptionA: {
name: "Fondle balls",
description: "Fondle your own balls using your hand",
modes: ["solo"],
staminaCost: 4,
target: "self",
requirements: {
actorGenitals: ["Penis"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 8
}
]
},
soloOptionB: {
name: "Stroke",
description: "Stroke your penis",
modes: ["solo"],
staminaCost: 8,
target: "self",
requirements: {
actorGenitals: ["Penis"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 12
}
]
},
soloOptionC: {
name: "Rub breasts",
description: "Play with your breasts",
modes: ["solo"],
staminaCost: 2,
target: "self",
requirements: {
actorGenitals: ["Vagina"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 4
}
]
},
soloOptionD: {
name: "Rub pussy",
description: "Rub your pussy",
modes: ["solo"],
staminaCost: 4,
target: "self",
requirements: {
actorGenitals: ["Vagina"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 8
}
]
},
soloOptionE: {
name: "Finger yourself",
description: "Press a finger inside your pussy",
modes: ["solo"],
staminaCost: 8,
target: "self",
requirements: {
actorGenitals: ["Vagina"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 12
}
]
},
/* =========================================================
PARTNER ACTIONS
========================================================= */
/* PLAYER: PENIS
PARTNER: VAGINA
*/
partnerPVOptionA: {
name: "PV OPTION A",
description: "DESCRIPTION",
modes: ["partner"],
staminaCost: 10,
target: "other",
requirements: {
actorGenitals: ["Penis"],
targetGenitals: ["Vagina"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 8
},
{
type: "arousal",
target: "target",
amount: 14
}
]
},
/* PLAYER: VAGINA
PARTNER: PENIS
*/
partnerVPOptionA: {
name: "VP OPTION A",
description: "DESCRIPTION",
modes: ["partner"],
staminaCost: 10,
target: "other",
requirements: {
actorGenitals: ["Vagina"],
targetGenitals: ["Penis"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 12
},
{
type: "arousal",
target: "target",
amount: 10
}
]
},
/* PLAYER: PENIS
PARTNER: PENIS
*/
partnerPPOptionA: {
name: "PP OPTION A",
description: "DESCRIPTION",
modes: ["partner"],
staminaCost: 10,
target: "other",
requirements: {
actorGenitals: ["Penis"],
targetGenitals: ["Penis"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 10
},
{
type: "arousal",
target: "target",
amount: 12
}
]
},
/* PLAYER: VAGINA
PARTNER: VAGINA
*/
partnerVVOptionA: {
name: "VV OPTION A",
description: "DESCRIPTION",
modes: ["partner"],
staminaCost: 10,
target: "other",
requirements: {
actorGenitals: ["Vagina"],
targetGenitals: ["Vagina"]
},
effects: [
{
type: "arousal",
target: "actor",
amount: 10
},
{
type: "arousal",
target: "target",
amount: 12
}
]
},
/* AVAILABLE TO EVERY COMBINATION */
partnerUniversalOption: {
name: "UNIVERSAL OPTION",
description: "DESCRIPTION",
modes: ["partner"],
staminaCost: 6,
target: "other",
requirements: {},
effects: [
{
type: "arousal",
target: "actor",
amount: 6
},
{
type: "arousal",
target: "target",
amount: 8
}
]
},
rest: {
name: "Slow Down",
description: "Recover some Stamina.",
modes: ["solo", "partner"],
staminaCost: 0,
target: "self",
requirements: {},
effects: [
{
type: "stamina",
target: "actor",
amount: 12
},
{
type: "arousal",
target: "actor",
amount: -7
}
]
}
};
/* =========================================================
CREATE PRIVATE PARTICIPANT
========================================================= */
window.createPrivateParticipant = function(config) {
return {
runtimeId:
config.runtimeId,
name:
config.name,
control:
config.control || "player",
stamina:
config.stamina !== undefined
? config.stamina
: 100,
maxStamina:
config.maxStamina || 100,
arousal:
config.arousal || 0,
maxArousal:
config.maxArousal || 100,
genitals:
config.genitals || "Unknown",
tags:
config.tags || [],
actions:
config.actions || []
};
};
/* =========================================================
START PRIVATE ENCOUNTER
========================================================= */
window.startPrivateEncounter = function(config) {
const v =
State.variables;
const encounter = {
active: true,
id:
config.id ||
"privateEncounter",
mode:
config.mode ||
"solo",
participants: [],
turnIndex: 0,
pendingAction: null,
log: [],
goal:
config.goal || {
type: "playerArousal",
amount: 100
},
successPassage:
config.successPassage,
exitPassage:
config.exitPassage
};
config.participants.forEach(
function(participant) {
encounter.participants.push(
createPrivateParticipant(
participant
)
);
}
);
v.privateEncounter =
encounter;
return true;
};
window.getCurrentPrivateParticipant = function() {
const encounter =
State.variables.privateEncounter;
if (!encounter) {
return null;
}
return encounter.participants[
encounter.turnIndex
];
};
/* =========================================================
ACTION REQUIREMENTS
========================================================= */
window.canUsePrivateAction = function(
actor,
action,
target
) {
const encounter =
State.variables.privateEncounter;
if (
!encounter ||
!actor ||
!action
) {
return false;
}
/* =========================
MODE
========================= */
if (
action.modes &&
!action.modes.includes(
encounter.mode
)
) {
return false;
}
/* =========================
STAMINA
========================= */
if (
actor.stamina <
(action.staminaCost || 0)
) {
return false;
}
const requirements =
action.requirements || {};
/* =========================
ACTOR GENITALS
========================= */
if (
requirements.actorGenitals &&
requirements.actorGenitals.length > 0
) {
if (
!requirements.actorGenitals.includes(
actor.genitals
)
) {
return false;
}
}
/* =========================
ACTOR TAGS
========================= */
if (
requirements.actorTags &&
requirements.actorTags.length > 0
) {
const valid =
requirements.actorTags.every(
tag =>
actor.tags.includes(tag)
);
if (!valid) {
return false;
}
}
/* =========================
AROUSAL REQUIREMENTS
========================= */
if (
requirements.minArousal !== undefined &&
actor.arousal <
requirements.minArousal
) {
return false;
}
if (
requirements.maxArousal !== undefined &&
actor.arousal >
requirements.maxArousal
) {
return false;
}
/* =========================
SELF-TARGETED ACTIONS
========================= */
if (
action.target !== "other"
) {
const selfTarget =
target || actor;
if (
requirements.targetGenitals &&
requirements.targetGenitals.length > 0 &&
!requirements.targetGenitals.includes(
selfTarget.genitals
)
) {
return false;
}
if (
requirements.targetTags &&
requirements.targetTags.length > 0
) {
const valid =
requirements.targetTags.every(
tag =>
selfTarget.tags.includes(tag)
);
if (!valid) {
return false;
}
}
return true;
}
/* =========================
PARTNER-TARGETED ACTIONS
If a target is supplied, check that target.
If no target has been supplied yet, check all
other participants and allow the action if at
least one compatible partner exists.
========================= */
let possibleTargets;
if (target) {
if (
target.runtimeId ===
actor.runtimeId
) {
return false;
}
possibleTargets = [target];
} else {
possibleTargets =
encounter.participants.filter(
participant =>
participant.runtimeId !==
actor.runtimeId
);
}
if (
possibleTargets.length === 0
) {
return false;
}
return possibleTargets.some(
function(candidate) {
/* TARGET GENITALS */
if (
requirements.targetGenitals &&
requirements.targetGenitals.length > 0
) {
if (
!requirements.targetGenitals.includes(
candidate.genitals
)
) {
return false;
}
}
/* TARGET TAGS */
if (
requirements.targetTags &&
requirements.targetTags.length > 0
) {
const valid =
requirements.targetTags.every(
tag =>
candidate.tags.includes(tag)
);
if (!valid) {
return false;
}
}
return true;
}
);
};
/* =========================================================
APPLY PRIVATE EFFECT
========================================================= */
window.applyPrivateEffect = function(
actor,
target,
effect
) {
let recipient;
if (
effect.target === "target"
) {
recipient =
target;
} else {
recipient =
actor;
}
if (!recipient) {
return;
}
switch (effect.type) {
/* AROUSAL */
case "arousal":
recipient.arousal +=
effect.amount;
recipient.arousal =
Math.max(
0,
Math.min(
recipient.maxArousal,
recipient.arousal
)
);
break;
/* STAMINA */
case "stamina":
recipient.stamina +=
effect.amount;
recipient.stamina =
Math.max(
0,
Math.min(
recipient.maxStamina,
recipient.stamina
)
);
break;
default:
console.warn(
"Unknown private effect:",
effect.type
);
}
};
/* =========================================================
PERFORM PRIVATE ACTION
========================================================= */
window.performPrivateAction = function(
actionId,
targetRuntimeId
) {
const encounter =
State.variables.privateEncounter;
const actor =
getCurrentPrivateParticipant();
const action =
setup.privateActions[actionId];
if (
!encounter ||
!actor ||
!action
) {
return false;
}
/* =========================
FIND TARGET
========================= */
let target = actor;
if (
action.target === "other"
) {
if (!targetRuntimeId) {
return false;
}
target =
encounter.participants.find(
participant =>
participant.runtimeId ===
targetRuntimeId
);
if (
!target ||
target.runtimeId === actor.runtimeId
) {
return false;
}
} else if (targetRuntimeId) {
const selectedTarget =
encounter.participants.find(
participant =>
participant.runtimeId ===
targetRuntimeId
);
if (selectedTarget) {
target = selectedTarget;
}
}
/* =========================
CHECK REQUIREMENTS
========================= */
if (
!canUsePrivateAction(
actor,
action,
target
)
) {
return false;
}
/* =========================
PAY STAMINA COST
========================= */
actor.stamina -=
action.staminaCost || 0;
actor.stamina =
Math.max(
0,
Math.min(
actor.maxStamina,
actor.stamina
)
);
/* =========================
APPLY EFFECTS
========================= */
action.effects.forEach(
function(effect) {
applyPrivateEffect(
actor,
target,
effect
);
}
);
/* =========================
LOG
========================= */
encounter.log.push(
actor.name +
" uses " +
action.name +
"."
);
/* =========================
CHECK COMPLETION
========================= */
if (
checkPrivateEncounterEnd()
) {
return true;
}
advancePrivateTurn();
Engine.play(
"Private Interaction"
);
return true;
};
/* =========================================================
CHECK PRIVATE ENCOUNTER END
========================================================= */
window.checkPrivateEncounterEnd = function() {
const encounter =
State.variables.privateEncounter;
if (
!encounter ||
!encounter.active
) {
return false;
}
const player =
encounter.participants.find(
participant =>
participant.runtimeId ===
"player"
);
/* PLAYER THRESHOLD */
if (
encounter.goal.type ===
"playerArousal"
) {
if (
player.arousal >=
encounter.goal.amount
) {
finishPrivateEncounter();
return true;
}
}
/* EVERYONE THRESHOLD */
if (
encounter.goal.type ===
"everyoneArousal"
) {
const complete =
encounter.participants.every(
participant =>
participant.arousal >=
encounter.goal.amount
);
if (complete) {
finishPrivateEncounter();
return true;
}
}
/* SPECIFIC PARTICIPANT */
if (
encounter.goal.type ===
"participantArousal"
) {
const participant =
encounter.participants.find(
p =>
p.runtimeId ===
encounter.goal.runtimeId
);
if (
participant &&
participant.arousal >=
encounter.goal.amount
) {
finishPrivateEncounter();
return true;
}
}
return false;
};
window.finishPrivateEncounter = function() {
const encounter =
State.variables.privateEncounter;
if (!encounter) {
return;
}
encounter.active =
false;
Engine.play(
encounter.successPassage
);
};
window.exitPrivateEncounter = function() {
const encounter =
State.variables.privateEncounter;
if (!encounter) {
return;
}
encounter.active =
false;
Engine.play(
encounter.exitPassage
);
};
/* =========================================================
ADVANCE PRIVATE TURN
========================================================= */
window.advancePrivateTurn = function() {
const encounter =
State.variables.privateEncounter;
if (
!encounter ||
encounter.participants.length === 0
) {
return;
}
const participantCount =
encounter.participants.length;
/*
For now, passive participants do not receive turns.
This means partnered encounters remain
player-controlled until NPC interaction AI
is added later.
*/
for (
let attempts = 0;
attempts < participantCount;
attempts++
) {
encounter.turnIndex++;
if (
encounter.turnIndex >=
participantCount
) {
encounter.turnIndex = 0;
}
const nextParticipant =
encounter.participants[
encounter.turnIndex
];
if (
nextParticipant.control ===
"player"
) {
return;
}
}
/*
Safety fallback:
return control to the player.
*/
const playerIndex =
encounter.participants.findIndex(
participant =>
participant.runtimeId ===
"player"
);
encounter.turnIndex =
playerIndex >= 0
? playerIndex
: 0;
};
<</script>>
<<set $alexisGenitals to "Unknown">>
<<set $alexisHouse to "Unsorted">>
<<set $alexisAffinity = 0>>
<<set $alexisRelationship = "neutral">>
<<set $alexisRelation = "Aquintances">>
<<set $playerFriend to "">>
<<set $petType = "">>
<<set $petName = "">>
<<set $clarissaRelation = "Professor">>
<<set $profHawthorneGenitals to "Unknown">>
<<set $profHawthorneRelation = 0>>
<<set $thornwellGenitals to "Unknown">>
<<set $thornwellRelation = "Headmaster">>
<<set $elliotRelation = "Acquaintance">>
<<set $elliotGenitals to "Unknown">>
<<set $sebastianRelation = "Rival">>
<<set $sebastianAffinity = 0>>
<<set $sebastianGenitals to "Unknown">>
<<set $sebastianHouse = "Unsorted">><<set $returnPassage = passage()>>
<div class="creator">
<div>
<label><strong>Name</strong></label>
<input type="text" id="nameInput" placeholder="Enter name">
</div>
<div>
<label>Pronouns:</label>
<select data-var="$gender">
<option>He/Him/His</option>
<option>She/Her/Hers</option>
<option>They/Them/Their</option>
<option>Unselected</option>
</select>
</div>
<div class="full-row">
<label>Blood Status:</label>
<select data-var="$bloodstatus">
<option>Arcane-Locked</option>
<option>Mixed-Line</option>
<option>Deepborn</option>
<option>Unselected</option>
</select>
</div>
<div>
<label>Height:</label>
<input id="heightSlider" type="range" min="48" max="84" step="1"
data-var="$height" value="<<print $height>>">
<div id="heightText"></div>
</div>
<div>
<label>Body Type:</label>
<select data-var="$bodyType">
<option>Average</option>
<option>Slim</option>
<option>Athletic</option>
<option>Broad</option>
<option>Curvy</option>
<option>Unselected</option>
</select>
</div>
<div class="button-row">
<button onclick="randomizeBasics()">Randomize</button>
<button onclick="resetBasics()">Reset</button>
<span id="nextLink">[[Next->Creator_Appearance]]</span>
</div>
</div>
<<script>>
/* ---------------------------
BASICS — PAGE-ONLY LOGIC
--------------------------- */
function formatHeight(inches) {
const feet = Math.floor(inches / 12);
const inch = Math.round(inches % 12);
return feet + " ft " + inch + " in";
}
function updateHeightText() {
const val = parseInt($("#heightSlider").val(), 10);
$("#heightText").text(formatHeight(val));
}
function updatePreview() {
$("#preview").empty().wiki('<<set $previewMode = "basics">><<include "Preview">>');
}
function validateBasics() {
const v = State.variables;
const required = [
v.name,
v.gender,
v.height,
v.bodyType,
v.bloodstatus
];
const invalid = required.some(x => !x || x === "Unselected");
$("#nextLink").toggleClass("disabledChoice", invalid);
}
function syncBasicsUI() {
const v = State.variables;
$("#nameInput").val(v.name || "");
$("[data-var='$gender']").val(v.gender || "Unselected");
$("[data-var='$bloodstatus']").val(v.bloodstatus || "Unselected");
$("[data-var='$bodyType']").val(v.bodyType || "Unselected");
$("#heightSlider").val(typeof v.height === "number" ? v.height : 60);
updateHeightText();
updatePreview();
validateBasics();
}
/* Name input */
$(document).on("input", "#nameInput", function() {
State.variables.name = $(this).val();
updatePreview();
validateBasics();
});
/* Dropdowns/sliders on this page */
$(document).on("change input", "[data-var]", function() {
const dv = $(this).data("var");
const val = $(this).val();
if (dv === "$height") {
State.variables.height = parseInt(val, 10);
updateHeightText();
} else {
State.variables[dv.substring(1)] = val;
}
updatePreview();
validateBasics();
});
/* ✅ Randomize ONLY the fields on this page */
window.randomizeBasics = function() {
const Name = [
"Alistair","Alec","Archibald","Barnaby","Benedict","Callum","Cedric","Corwin",
"Dominic","Ellis","Emrys","Edmund","Fenwick","Fletcher","Garrick","Gideon",
"Hadrian","Hugo","Ignatius","Jasper","Kingsley","Leander","Lysander","Magnus",
"Montague","Orion","Percival","Quentin","Regulus","Rowan","Silas","Tobias",
"Tristan","Wilfred","Xavier","York","Zacharias",
"Adeline","Astrid","Beatrice","Briony","Cassandra","Celia","Clarissa","Daphne",
"Edeline","Eira","Elysia","Elowen","Felicity","Florence","Genevieve","Gwen",
"Harriet","Helena","Imogen","Isolde","Juliet","Lavinia","Lilith","Marigold",
"Minerva","Morgana","Nerissa","Octavia","Ophelia","Penelope","Rhiannon",
"Rosalind","Seraphina","Tabitha","Thalia","Verity","Winifred","Yvaine","Zara"
];
const gender = ["He/Him/His","She/Her/Hers","They/Them/Their"];
const body = ["Average","Slim","Athletic","Broad","Curvy"];
const blood = ["Arcane-Locked","Mixed-Line","Deepborn"];
const v = State.variables;
v.name = Name.random();
v.gender = gender.random();
v.height = Math.floor(Math.random() * (84 - 48 + 1)) + 48;
v.bodyType = body.random();
v.bloodstatus = blood.random();
syncBasicsUI();
};
/* ✅ Reset ONLY the fields on this page */
window.resetBasics = function() {
const v = State.variables;
v.name = "";
v.gender = "Unselected";
v.height = 60;
v.bodyType = "Unselected";
v.bloodstatus = "Unselected";
syncBasicsUI();
};
/* Init */
$(document).ready(function() {
syncBasicsUI();
});
<</script>><<set _feet = Math.floor($height / 12)>>
<<set _inch = $height % 12>>
<b>Preview:</b><br>
Name: <<print $name>><br>
Height: <<print _feet>> ft <<print _inch>><br>
Body type: <<print $bodyType.toLowerCase()>><br>
Skin Tone: <<print $skinTone>><br>
Hair Style: <<print $hairStyle>><br>
Hair Colour: <<print $hairColor.toLowerCase()>><br>
Eye colour: <<print $eyeColor.toLowerCase()>><br>
Pronouns: <<print $gender>><br>
Breasts: <<print $breast>><br>
Genitals: <<print $genitals>><br>
<<if $genitals is "Penis">>
Penis Size: <<print $genitalSize>> inches<br>
<</if>>
Blood-Status: <<print $bloodstatus>><br>
<<if $bloodstatus is "Arcane-Locked">>
<em>Born without magical lineage, but awakened through rare arcane sparks.</em>
<<elseif $bloodstatus is "Mixed-Line">>
<em>A balance of mundane and magical ancestry.</em>
<<elseif $bloodstatus is "Deepborn">>
<em>Descended from generations of magic-wielders.</em>
<<else>>
<em>Select a bloodline to see its description.</em>
<</if>>
.creator {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.2em 2em;
align-items: center;
margin-top: 1em;
}
.creator label {
display: block;
font-weight: bold;
margin-bottom: 0.2em;
}
.creator select,
.creator input[type="range"] {
width: 100%;
}
.creator .full-row {
grid-column: span 2; /* makes element span both columns */
text-align: center;
margin-top: 1em;
}
<<set $returnPassage = passage()>>
In the rolling English hills, hidden past winding country roads and pockets of old forest, stands Hexmoor Academy—the UK’s oldest and most respected institution for adult magical education.
Here, magic isn’t taught to children.
It never has been.
Across Britain, Scotland, Wales, and Northern Ireland, young witches and sorcerers are raised knowing that their formal training begins only once they reach adulthood—old enough to shape their abilities responsibly, and old enough to understand the weight of using them.
Hexmoor accepts students between the ages of eighteen and twenty-five. Its halls are filled with young adults from every corner of the United Kingdom: fresh-faced newcomers just stepping into independence, seasoned apprentices who delayed their studies, and those still trying to grasp who they are and what their magic means.
And now, you stand among them.
Where your path leads from here is entirely up to [[you.]]<div id="floating-controls">
<<link "Save">><<save>><</link>>
<<link "Restart">><<restart>><</link>>
<div id="quest-button" style="display:none;">
<button onclick="Engine.play('Quests')">Quests</button>
</div>
</div>
<<set $returnPassage = passage()>>
You freeze mid-movement.
The tapping comes again—sharp, deliberate, impatient.
Tap. Tap. Tap.
Your head turns toward the window, pulse ticking a little faster now. The morning light catches on the glass just right, revealing a faint, shifting outline on the other side.
You step closer.
There, perched on the narrow sill, feathers ruffled against the cold, is an owl—broad-winged, amber-eyed, and staring straight at you as if you’re the strange one here. It taps its beak against the window again, more insistently this time, as though offended you’ve taken this long to notice.
You unlatch the window and push it open. A rush of crisp air sweeps in, and the owl hops forward without hesitation, gliding inside with a surprisingly graceful swoop that circles your room once before landing neatly on the corner of your bed.
Only then do you see it.
A letter, tied securely to its leg with a thin ember-orange ribbon.
Your clothes forgotten in your hands, you move closer, slowly, almost afraid to blink in case the moment evaporates. The owl extends its leg toward you, deliberate and regal, as if this is something it’s done a thousand times before.
The envelope is thick, cream-coloured, the paper heavy and textured. <<print $name>> is written across the front in deep ink—beautiful, impossibly elegant handwriting.
Your fingers hover above it for a heartbeat before you finally lift the letter free.
The owl hoots once—soft, approving—then settles itself, waiting.
As though it already knows you’re going to open it.
[[Open it]]--------------------------[[Pet the owl]]<<set $returnPassage = passage()>>
The owl blinks at you from its place on the corner of your bed as you finally turn your attention back to the envelope resting in your hands. It sits calmly atop your rumpled blankets, feathers puffed slightly from the cool draft drifting through the still-open window, its golden eyes fixed unblinking on you as though evaluating your every breath.
The parchment feels heavier now—not physically, but in the way something life-changing can make even air feel thicker.
You draw a slow, steadying breath and slide the letter fully from its envelope.
The parchment glides free with a soft whisper, edges crisp beneath your fingers. The ink catches the morning light in a subtle shimmer, the handwriting elegant and deliberate—each curve and stroke crafted by someone who has written these words many times, and never lightly.
Your heart stutters.
For a moment, everything in the room falls utterly still.
You let your eyes fall to the beginning of the letter and read the words written just for you.
Dear <<print $name>>,
We are pleased to inform you that you have been accepted into the incoming class of Hexmoor Academy for Arcane Study....
The words waver—not because they’re unclear, but because the reality behind them threatens to unmoor your entire understanding of the world. A tightness builds in your throat, your breaths coming a little shorter as you try to comprehend what you’re holding.
On the bed, the owl shifts only slightly, feathers rustling in a soft, grounding sound. It watches you with quiet patience, as though it already knows the disbelief swelling inside you and is simply waiting for you to catch up.
Your fingers curl more firmly around the parchment.
This isn’t imagined.
This isn’t a joke.
This is real—astonishingly, impossibly real.
[[Read on]]
<<set $returnPassage = passage()>>
You glance back toward the bed, the cool morning air drifting in through the cracked window. The owl hasn’t moved from where it settled—right on the corner of your mattress, talons sunk lightly into the blanket, feathers puffed against the draft. Its amber eyes track you with a steady, almost knowing calm, as though waiting to see what you’ll decide.
It lets out a soft, airy huff when you step closer.
The letter is already in your hand—heavy parchment, edges crisp, your name written across the front in an elegant script you don’t recognise—but for a moment, you forget about it completely. Your free hand rises hesitantly toward the owl, hovering just above the crown of its head.
The owl tilts slightly… then leans into your touch.
Its feathers are warm beneath your fingers—downy, smooth, impossibly soft as you stroke gently along the back of its head and down its neck. A low, quiet trill hums from its throat, something between a purr and a coo, its body relaxing as though this is precisely the reassurance it had hoped for.
It doesn’t stir.
It doesn’t take flight.
It simply stays there—perched on your bed, wings tucked neatly at its sides, eyes half-lidded with a kind of serene contentment.
For a strange, suspended heartbeat, the world narrows to just this:
you, the owl resting comfortably on your blanket, and the unopened letter waiting in your other hand, its weight cool against your skin.
[[Open it]]<<set $returnPassage = passage()>>
Dear <<print $name>>,
We are pleased to inform you that you have been accepted to attend Hexmoor Academy for Arcane Study, located within the northern English hills, for the upcoming academic cycle. You have been selected to begin formal training as an adult practitioner of the arcane arts.
As you may already know, untrained spellcasting is strictly prohibited outside of licensed institutions as outlined in the United Kingdom Magical Practice Act of 1907. Hexmoor Academy provides a legally authorised environment in which you will learn, develop, and responsibly refine your magical abilities under the guidance of accredited faculty.
Your induction day is scheduled for 1 September. Students are expected to arrive at Briarwick Station no later than 10:45 a.m., where you will be escorted to the Academy grounds.
A list of required books, materials, and recommended personal equipment is included below.
Students may also bring one approved companion creature, provided it is registered and non-aggressive. Common choices include:
a fox-sprite, a messenger owl, or a moss-toad.
We look forward to welcoming you to Hexmoor and guiding you through the disciplined study and exploration of your innate magic.
Yours faithfully,
Headmaster Aldric Thornwell
Hexmoor Academy for Arcane Study
[[Required Books & Equipment (First-Year Curriculum for Adults)]]
<<set $returnPassage = passage()>>
Uniform (All Students):
- Reactive House Robes
- Three sets of plain dark work-robes (standard adult fit)
- One formal pointed hat (black or deep charcoal)
- One pair of reinforced gloves
- One winter cloak
Course Books:
- The Principles of Channelcraft by Marwen Alderholt
- Runic Logic: Foundations of Ancient Script by Orin Feldwright
- Elemental Dynamics & Natural Forces by Elyra Thorn
- Fundamentals of Alchemy & Mixturecraft by Rowan Vell
- A Field Guide to Common & Uncommon Creatures by Dr. Lyneth Marrow
- Applied Charms & Everyday Spellforms by Cillian Drex
- Protective Magics & Countermeasures by Seraphine Locke
- Transmutation Theory for Adult Practitioners by Idris Calder
- The History of Arcane Governance in the United Kingdom by Dorian Merriweather
Other Equipment:
- 1 wand (registered and attuned)
- 1 cauldron (iron or steel, standard size 2)
- 1 set of glass phials (non-reactive)
- 1 set of calibrated brass or silver scales
- 1 arcane planner folio (non-spellcasting model)
- 1 basic alchemy kit (approved components only)
[[Put it down]]
<div class="quests-page">
<h2>Quests</h2>
<div class="quests-grid">
<<for _q range $quests>>
<<set _questTitle = _q.title>>
<<set _questDescription = _q.description>>
<<set _questStep = _q.steps[_q.currentStep]>>
<<set _questCurrent = _q.currentStep + 1>>
<<set _questTotal = _q.steps.length>>
<<capture _questTitle _questDescription _questStep _questCurrent _questTotal>>
<div class="quest-slot">
<div class="quest-slot-title">
<<= _questTitle>>
</div>
<div class="quest-slot-description">
<<= _questDescription>>
</div>
<div class="quest-slot-progress">
Step <<= _questCurrent>> / <<= _questTotal>>
</div>
<div class="quest-slot-step">
<<= _questStep>>
</div>
</div>
<</capture>>
<</for>>
</div>
<<if !$quests || $quests.length === 0>>
<div class="quests-empty">
You have no active quests.
</div>
<</if>>
</div>
<br>
<<link "Return">>
<<goto $returnPassage>>
<</link>><<set $returnPassage = passage()>>
You lower the letter slowly, the parchment still warm from your grip, and set it carefully on the edge of your bed. The words swim through your mind — admissions, required supplies, a future you never imagined suddenly unfolding like a map.
A soft rustle draws your eyes back to the window.
The owl — still perched exactly where it had been — blinks once, tilting its head as if assessing your reaction. The morning light catches the flecks in its amber eyes, turning them to molten gold.
You step closer.
<div class="dialogueBox"> <div class="speakerName"><<print $name>></div> <div class="dialogueDivider"></div> <div class="dialogueText"> Wait— </div></div>
But the owl has already made its decision.
It spreads its wings with a sweep so smooth it barely disturbs the air, pushes off the sill, and lifts into the sky. For a brief moment, its shape is framed perfectly against the pale dawn — wings outstretched, feathers catching the sun like burnished copper.
And then it’s gone.
A fading silhouette.
A whisper of wings.
Silence.
You stare after it, letter still half-folded on your bed behind you. The sudden quiet is almost unreal.
You blink hard.
Your mouth opens before you even think about it.
<div class="dialogueBox"> <div class="speakerName"><<print $name>></div> <div class="dialogueDivider"></div> <div class="dialogueText"> Where am I supposed to get all this stuff? </div></div>
The sky offers no answer.
The owl does not return.
You’re left standing alone in your room, staring at the empty windowsill, feeling the first sharp sting of confusion — and the strange, electric thrill of a world that just opened its gates to you… and offered no instructions on how to step through.
[[A few days pass]]<<set $returnPassage = passage()>>
Darkness presses in before the sound reaches you.
A low, distant murmur.
People speaking in hushed voices.
The soft shuffle of feet over damp grass.
Then the world sharpens—
and you realise you’re standing beneath a grey sky, the clouds hanging low and heavy like wet wool. The air smells of rain, cold earth, and wilted lilies.
You look down.
Cold fingers.
Your breath fogs faintly in the chill.
Around you, rows of chairs line the soaked ground. Witches and wizards in somber robes sit rigidly, their hats removed in respect. Umbrellas tremble in the wind. A few eyes flicker toward you—pitying, apologetic, uncertain—but no one steps close.
The coffin at the front looks far too small for how big your parents felt in your life.
A priest drones on, his voice dim as though muffled by the thick air.
<div class="dialogueBox"><div class="speakerName">Priest</div> <div class="dialogueDivider"></div> <div class="dialogueText"> They were taken from us too soon, claimed by a tragedy none of us could have anticipated; may their spirits find peace and rest in light.</div> </div>
You try to speak.
To breathe.
To move.
To do anything—
But your feet stay rooted to the spot.
Your mother’s favourite scarf, a deep warm colour you remember clutching as a child, is draped over the polished wood. Your father’s watch lies across it, the cracked glass catching the dim light as if refusing to forget the moment it stopped. The sight punches the air from your lungs.
You blink—
And suddenly, the rain starts.
Cold needles patter against your shoulders and cheeks, running down like tears you haven’t allowed yourself to shed. Someone reaches toward you—just a shape in the blur—maybe to comfort you, maybe to guide you to your seat.
But the hand never touches.
Instead—
A howl of wind tears through the cemetery.
Your heart spikes.
The world fuzzes, shivers—
The sky cracks open with light—
—and the coffin lid begins to close.
Slowly.
Softly.
I’m not ready—
Your throat chokes on a sound that won’t come out.
The lid seals with a dull, final thunk.
You lurch forward—
And the world drops out from under you.
[[Open your eyes]]<<set $returnPassage = passage()>>
A sharp gasp tears from your chest as you bolt upright, breath shaking. Sweat clings to your skin. For a moment, the room around you is nothing but shapes and shadows—too dark, too quiet, too still.
But gradually the real world returns.
Your bedroom.
Your sheets tangled.
Morning light filters weakly through your curtains, soft but intrusive, doing little to chase away the hollow ache the dream left behind. Your heart thuds too hard, too fast, as you drag a shaky hand over your face. The room is quiet—too quiet—and for a moment you sit there, letting your breathing steady, letting reality settle back into place.
Your body feels heavy, drained, as though the grief from your dream followed you into the waking world. You let out a tired groan as you force yourself out of bed.
You shuffle into the bathroom, feet cold against the floor. The mirror greets you with a reflection that looks just as exhausted as you feel—hair messy, eyes still puffy from sleep, posture slouched with that familiar "really? today again?" energy. You stare at yourself for a long moment before letting out a deep sigh, one that feels like it’s been sitting in your chest for years.
The shower hisses to life. Steam curls through the room, clinging to your skin as hot water spills over your shoulders, easing the tightness in your muscles and softening the raw edges left by the dream. You let it wash over you longer than necessary, letting the warmth hold you together.
When you finally step out, the mirror is fogged over, hiding your expression. Maybe that’s for the best.
You wrap a towel around yourself and pad back into your bedroom, rubbing your hair dry as you search absently for clothes—just another morning, just another attempt at normalcy.
Then—
[[tap. tap. tap]]<<set $returnPassage = passage()>><<set $returnPassage = passage()>>
The days that follow blur together in a strange, suspended haze.
Not quite real.
Not quite impossible.
Just… waiting.
You keep the letter close—even when you try not to. Folded neatly on your desk. Slipped into your pocket. Set on your bedside table where your eyes always seem to drift before sleep. Every time you look at it, the words feel heavier, as if the parchment itself is anchoring your world to something bigger, something you don’t fully understand yet.
The owl returns each morning.
Never intruding, never demanding—just perching on the corner of your bedframe like it’s appointed itself your silent guardian. Sometimes it naps. Sometimes it watches you with those impossibly knowing golden eyes. Sometimes it nudges its beak against your arm as if to remind you: this is happening.
You go to work. You come home. You pretend life is normal.
But nothing is.
Not when you keep finding yourself rereading the supply list until you’ve memorized every item.
Not when you catch yourself glancing at strangers on the street, wondering if any of them are… like you.
Not when your mind keeps replaying that moment—the wax seal cracking, the crest gleaming, your name inked in elegant handwriting—as if the universe whispered wake up.
Even your dreams shift.
No more funerals.
No more hollow echoes of loss.
Just fragments—torch-lit corridors, bookshelves that stretch too high, shadows that hum with a kind of quiet, impossible power.
And then—
On the third morning, as sunlight spills across your sheets, the owl rustles its feathers and nudges your arm once more. A small tap. Firm. Insistent.
When you look down, there’s another envelope grasped delicately in its beak.
Smaller. Thinner.
Sealed with the same crest.
The owl releases it into your hand, then steps back, watching you with that same patient, guiding focus.
Something shifts inside your chest.
A few days ago, everything changed.
Today… it feels like something is beginning.
[[Open the new letter]]
<<set $returnPassage = passage()>>
The envelope is lighter than the first, but the moment you touch it, something inside you steadies—
as if this one isn’t here to shake your world apart,
but to show you where to step next.
You break the seal.
It opens with none of the ceremonial weight of the first letter. No thunder in your chest.
Just a soft tear of wax and parchment, like the start of something quieter…
but just as important.
Inside is a single page.
The handwriting is different this time—still elegant, still practiced, but warmer.
Less formal. More human.
You unfold it.
Dear <<print $name>>,
I hope this letter finds you well after your initial notice of acceptance. I understand that such news—particularly when unexpected—can be overwhelming. Rest assured, you are not alone in this transition.
I would like to speak with you in person regarding your admission, your background, and the steps ahead.
Please meet me at The Thistle & Wand on the afternoon of August 5th. I will be waiting for you in the back room, and you will be able to recognise me easily.
Everything will be explained when we meet.
Until then, keep your acceptance letter safe.
And remember non-gifted perception cannot always be trusted. Magic bends the familiar around places it wishes to hide.
Sincerely,
Professor Clarissa Hawthorne
The parchment trembles slightly in your hands—
not from fear, but from the strange, electric certainty humming beneath your skin.
A meeting.
In person.
With someone from… that world.
Your world?
The owl hoots softly beside you, as if urging you to breathe.
Its wings rustle, sending a small draft over your arm.
Outside, the morning feels brighter. Sharper.
Like the day is suddenly filled with a direction you didn’t have before.
Tomorrow, you’re expected somewhere you’ve never been.
And someone is waiting for you.
[[Ask the owl what it wants]]--------------[[Re-read both letters]]<<set $returnPassage = passage()>>
You glance down at the owl, its golden eyes wide and unblinking as you lower the new envelope to your lap.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> What do you want? </div></div>
Your voice comes out half-whisper, half-plea.
Surely it can’t understand you.
The owl blinks.
Then it hops—
once, twice—
a tiny, purposeful shuffle across your bedspread until it’s right beside your leg. It tilts its head, considering you.
<div class="dialogueBox"> <div class="speakerName">Owl</div> <div class="dialogueDivider"></div> <div class="dialogueText"> *Hoot* </div></div>
And then it pecks your elbow.
Not hard.
Not aggressive.
Just a sharp, unmistakable hey.
You stare at it.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> “…Are you asking for food?” </div></div>
The owl straightens immediately—wings fluffing, chest puffing, eyes suddenly bright with triumphant excitement—
as if you’ve finally solved the most obvious puzzle in the world.
<div class="dialogueBox"> <div class="speakerName">Owl</div> <div class="dialogueDivider"></div> <div class="dialogueText"> *Hoo!* </div></div>
Something between a chirp and a demand.
You blink at it.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I don’t… even know what owls eat </div></div>
The owl’s head whips toward your desk.
Then back to you.
Then to the desk again.
You follow its gaze.
There—sitting where you dropped it last night—is a half-finished granola bar.
You narrow your eyes.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Absolutely not </div></div>
The owl opens its beak and lets out a dramatic, offended screech—
a full-body how dare you noise that would be terrifying if it weren’t coming from something the size of a pillow.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> No </div></div>
You say firmly, crossing your arms.
The owl flops onto its belly in exaggerated despair, wings spilling out dramatically, as if reenacting a silent death scene purely out of spite.
You pinch the bridge of your nose.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Fine. I’ll find you something actually edible. </div></div>
Instant resurrection.
It pops upright, feathers pristine, eyes gleaming with victory.
You can practically feel it saying:
Finally. Took you long enough.
The tiny terror hops to the edge of your bedframe, waiting expectantly—
as if this was always part of the arrangement.
[[Find something edible]]<<set $returnPassage = passage()>>
Dear <<print $name>>,
We are pleased to inform you that you have been accepted to attend Hexmoor Academy for Arcane Study, located within the northern English hills, for the upcoming academic cycle. You have been selected to begin formal training as an adult practitioner of the arcane arts.
As you may already know, untrained spellcasting is strictly prohibited outside of licensed institutions as outlined in the United Kingdom Magical Practice Act of 1907. Hexmoor Academy provides a legally authorised environment in which you will learn, develop, and responsibly refine your magical abilities under the guidance of accredited faculty.
Your induction day is scheduled for 1 September. Students are expected to arrive at Briarwick Station no later than 10:45 a.m., where you will be escorted to the Academy grounds.
A list of required books, materials, and recommended personal equipment is included below.
Students may also bring one approved companion creature, provided it is registered and non-aggressive. Common choices include:
a fox-sprite, a messenger owl, or a moss-toad.
We look forward to welcoming you to Hexmoor and guiding you through the disciplined study and exploration of your innate magic.
Yours faithfully,
Headmaster Aldric Thornwell
Hexmoor Academy for Arcane Study
[[Next]]
<<set $returnPassage = passage()>>
Uniform (All Students):
- Reactive House Robes
- Three sets of plain dark work-robes (standard adult fit)
- One formal pointed hat (black or deep charcoal)
- One pair of reinforced gloves
- One winter cloak
Course Books:
- The Principles of Channelcraft by Marwen Alderholt
- Runic Logic: Foundations of Ancient Script by Orin Feldwright
- Elemental Dynamics & Natural Forces by Elyra Thorn
- Fundamentals of Alchemy & Mixturecraft by Rowan Vell
- A Field Guide to Common & Uncommon Creatures by Dr. Lyneth Marrow
- Applied Charms & Everyday Spellforms by Cillian Drex
- Protective Magics & Countermeasures by Seraphine Locke
- Transmutation Theory for Adult Practitioners by Idris Calder
- The History of Arcane Governance in the United Kingdom by Dorian Merriweather
Other Equipment:
- 1 wand (registered and attuned)
- 1 cauldron (iron or steel, standard size 2)
- 1 set of glass phials (non-reactive)
- 1 set of calibrated brass or silver scales
- 1 arcane planner folio (non-spellcasting model)
- 1 basic alchemy kit (approved components only)
[[Last One]]<<set $returnPassage = passage()>>
Dear <<print $name>>,
I hope this letter finds you well after your initial notice of acceptance. I understand that such news—particularly when unexpected—can be overwhelming. Rest assured, you are not alone in this transition.
I would like to speak with you in person regarding your admission, your background, and the steps ahead.
Please meet me at The Thistle & Wand on the afternoon of August 5th. I will be waiting for you in the back room, and you will be able to recognise me easily.
Everything will be explained when we meet.
Until then, keep your acceptance letter safe.
And remember non-gifted perception cannot always be trusted. Magic bends the familiar around places it wishes to hide.
Sincerely,
Professor Clarissa Hawthorne
[[Ask the owl what it wants]]--------------[[Wait for tomorrow]]<<set $returnPassage = passage()>>
You stand, the owl watching you with the kind of intense expectation normally reserved for royalty awaiting a meal.
Your feet hit the cold floor as you cross the room and pull open the small cupboard beside your desk.
Inside: crumbs, an empty mug, a packet of instant noodles, and something that *might* once have been fruit.
Not helpful.
You move to the kitchen.
The owl hops after you—
no flapping, no hesitation—
just a determined little strut across the floorboards, talons clicking like impatient tapping.
Inside the fridge isn’t much better.
A few leftovers.
A nearly expired yogurt.
And a container of rotisserie chicken you meant to finish yesterday.
You pause.
The owl, standing at your feet, slowly… deliberately… lifts one foot and taps the fridge door.
Just once.
A clear **that one** gesture.
You sigh, pull the container open, and tear off a small piece of chicken.
You crouch and offer it out.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Here. Real food. </div></div>
The owl lights up—eyes wide, feathers puffing—
and snatches the chicken with surprising delicacy before hopping back a step to enjoy it.
It eats with the efficiency of someone who has *strong opinions* about breakfast.
Another piece disappears.
Then another.
Finally, with a satisfied trill, it shakes out its wings, gives you a proud little nod, and hops onto a nearby chair.
For a moment, you think that’s it.
Then it strides across the cushion, climbs up onto the backrest, spreads its wings—
and with a smooth leap, launches itself into the air.
It circles once around the kitchen, the tips of its wings brushing the light—
then swoops back toward your bedroom.
By the time you follow, the owl is perched neatly on your bedframe again, feathers immaculate, posture composed.
It gives a final soft *hoot*—
a goodbye, or a good-luck,
you can’t quite tell—
—and with a smooth beat of its wings, it lifts off and disappears out the open window.
You stand there for a long moment, the room strangely quiet without it.
Something has begun.
And now… it’s your move.
[[Wait for tomorrow]]<<set $returnPassage = passage()>>
The next morning arrives faster than you expect.
You barely remember falling asleep—just the quiet weight of anticipation settling over your chest, the way your thoughts kept looping around the same anchor:
The Thistle & Wand. This afternoon. Meet Professor Hawthorne.
But morning breaks with restless energy buzzing under your skin.
Waiting until afternoon feels impossible.
So you leave early.
London is its usual blur of movement—cars humming, crowds shifting, voices blending into one endless, tangled soundscape. You keep checking the scribbled directions you copied from the letter… yet somehow every turn feels wrong.
The street names blur.
The landmarks don’t line up.
You retrace your steps twice.
Then again.
Eventually you end up standing at a crossroads, staring helplessly at a row of old brick buildings that definitely shouldn’t all look exactly the same.
A frustrated sigh escapes you.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is ridiculous… </div></div>
You glance down at the paper in your hand, as if the ink might rearrange itself into clearer instructions.
It doesn’t.
You shift your weight, trying to remember the letter’s exact wording—
“Non-gifted perception cannot always be trusted. Magic bends the familiar around places it wishes to hide.”
And apparently it bends you into walking in circles.
You rub your hands over your face.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I left early so I wouldn’t be late. Now I’m just… lost. </div></div>
A soft sound answers you.
fwip fwip fwip—
the familiar beat of wings cutting the air.
[[You turn]]<<set $returnPassage = passage()>>
There—drifting down through the morning light like it owns the sky—is the owl.
It lands neatly on a lamppost beside you, feathers puffed with quiet authority.
Its golden eyes sweep over you once before it emits a purposeful—
<div class="dialogueBox"> <div class="speakerName">Owl</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hoot. </div></div>
Another—sharper this time.
<div class="dialogueBox"> <div class="speakerName">Owl</div> <div class="dialogueDivider"></div> <div class="dialogueText"> HOOt! </div></div>
You blink.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Don’t tell me you’re here to show me the way. </div></div>
The owl hops once on the metal bar.
Then spreads its wings and glides down to perch on a street sign.
It looks back at you.
Waits.
Then—
<div class="dialogueBox"> <div class="speakerName">Owl</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hoo. </div></div>
A clear message, even without language.
You let out a breathy, disbelieving laugh.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> …Fine. Lead on. </div></div>
The owl launches into the air—smooth, confident, weaving through the London morning like it’s done this a thousand times.
Every few metres it glances back, making sure you’re following.
You trail after it, weaving through crowds, past shops that seem to *shift* at the edges of your awareness.
And then—
The owl lands atop a small, soot-darkened sign above a pub wedged tightly between a bookshop and a record store.
You blink.
You swear this building was not here a moment ago.
The sign reads:
THE THISTLE & WAND
The wood is old.
The door is warped.
The windows are grime-fogged, barely reflecting the street’s light.
But as you stare, something inside your mind tugs—
a veil gently parting, revealing what was always there.
The owl gives one last triumphant farewell:
<div class="dialogueBox"> <div class="speakerName">Owl</div> <div class="dialogueDivider"></div> <div class="dialogueText"> HOO! </div></div>
Then it takes off into the sky, leaving you standing before the place where your life is about to change.
[[Enter the Thistle & Wand]]<<set $returnPassage = passage()>>
The moment you push open the warped wooden door, the outside world muffles behind you as if someone has lowered a curtain.
Warm, dim light spills across the floorboards—thick and honey-gold, flickering gently from lanterns mounted along the walls. The scent hits you first: a mix of old wood, herbs, a hint of smoke, and something savoury simmering slowly in the back. It’s comforting in a way you can’t explain, like stepping into a memory that doesn’t belong to you.
The pub is small but impossibly full of life.
Tables are scattered unevenly across the room, their legs mismatched, their surfaces etched with decades—maybe centuries—of scratches, initials, spills, and charm-burn marks. A low murmur of conversation hangs in the air: quiet, private, warm. People in cloaks of every colour sit hunched over steaming mugs and worn books, talking in low, familiar voices.
No one looks surprised to see you.
In fact…
most barely glance up, though a few pairs of curious eyes linger just long enough to make your stomach flip before returning to their drinks.
Behind the counter stands a long, polished oak bar. It’s stacked with bottles that shimmer in colours you’ve never seen in any liquor aisle—some glowing faintly, others swirling like storm clouds in glass. A kettle whistles softly somewhere in the back, accompanied by the clatter of utensils and what sounds suspiciously like a cauldron bubbling.
The air hums.
Not loudly.
Not dramatically.
Just subtly—like the faint electrical buzz you get right before a storm touches down.
Magic.
It clings to the room like dust motes dancing in the lanternlight.
A few patrons sit alone, ink-stained fingers wrapped around parchment or half-finished letters. A trio of witches argue in hushed tones over a glowing map spread across their table. A hooded man at the back absently stirs a spoon in a mug that appears to stir itself when he stops.
Despite its worn edges and cramped corners, the place feels alive—
warm, lived-in, and waiting.
You take a step forward, boots sinking into a rug so old its colours have faded into soft, muted echoes. The warmth from the hearth on the far wall brushes your skin, chasing away the morning chill that followed you inside.
And then you notice it:
A table near the corner.
Empty.
Neat.
As though someone cleaned it recently and left it untouched for one particular person.
For you.
Sunlight breaks weakly through the cloudy windows, landing in a soft beam directly across its surface.
Your pulse quickens.
This is where she asked you to meet her.
Professor Hawthorne.
A place in a world you didn’t know existed a week ago.
[[Take a seat and wait]]<<set $returnPassage = passage()>>
<<run $("#questBtn").show();>><<run $("#relationshipBtn").show();>>
<<set $showQuests = true>> <<set $showRelationships = true>>
The pub door opens again, letting in a wash of cooler air.
A woman steps inside—tall, self-assured, wrapped in a long, deep-green coat that moves as though it remembers wind even indoors. Her boots strike the floor with quiet precision. Dark hair, loosely tied back, escapes in soft curls around her face; her eyes sweep the room with the practiced sharpness of someone who misses nothing.
You can feel the shift immediately.
Not because she looks strange—
if anything, she blends in effortlessly—
but because the room reacts to her.
The barkeep straightens a little.
A few patrons bow their heads politely.
A man in the corner hurriedly folds away a newspaper as though out of respect.
Her gaze moves calmly across the pub—
methodical, searching—
passing over tables, chairs, patrons…
Then it lands on you.
Something in her expression changes—
not surprise, not recognition,
but a kind of quiet acknowledgment
as though she’s been expecting you exactly here, exactly now.
She approaches, her coat brushing softly behind her, and stops at your table.
A warm, steady voice breaks the moment.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You must be <<print $name>>. </div> </div>
She offers a small, sincere smile—professional, but not unfriendly.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m Professor Hawthorne. I believe you’ve been waiting for me. </div> </div>
The world tilts quietly around you—
not with fear, but with the dizzying sense that the next chapter has finally begun.
[[Wow]]-------------[[What's going on?]]<div style="text-align:center;">
<h2>Professor Clarissa Hawthorne</h2>
</div>
Age: 38
House: Skyreach
Subject: Warding & Defensive Magic
Pronouns: She/Her/Hers
Relation to you: <<print $clarissaRelation>>
Height & Build: 6ft, poised figure with a confident, upright posture
Face: Sharp, refined features; high cheekbones; observant grey-green eyes that take in everything at a glance
Hair: Dark chestnut brown, long and slightly wavy, usually tied back in a loose, functional half-tail
Skin: Warm ivory complexion with a faint dusting of freckles across her nose and cheeks
Expression: Calm, composed, with a hint of dry amusement that suggests she expects competence from those around her
Clothing: Deep forest-green travel cloak over practical mage robes; leather satchel slung cross-body; sleeves rolled slightly as if she’s prepared for hands-on work
Breast Size: Moderately full chest, proportional to her frame
Hips & Figure: Soft hourglass shape with naturally rounded hips
Arse: Rounded and proportional, the shape more a result of her posture and overall build than emphasized in any way
Genitals: <<print $profHawthorneGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>> <<set $profHawthorneRelation += 1>>
<<run addRelationship("Professor Clarissa Hawthorne", 38, "human")>>
She sits across from you with a quiet, composed grace, folding her hands on the table as though this meeting is simply an expected part of her day. Her eyes study you—not harshly, not judgementally, but with the practiced attentiveness of someone who has been evaluating students for many years.
Your throat goes tight for a moment, and before you can stop yourself, the word slips out.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Wow… </div></div>
For the briefest moment, something flickers across her face—
a quiet, almost surprised warmth.
Not flustered.
Not dismissive.
Just… gently pleased.
Her smile softens at the edges as she inclines her head, accepting the compliment without leaning into it.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That’s kind of you to say. But truly—there’s no need to be nervous. New students often react strongly to all of this. You’ve handled more than most before even stepping through our doors. </div></div>
Professional.
Composed.
But undeniably flattered.
She adjusts the parchment folder she brought with her, placing it gently between you both.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> But we do have quite a bit to discuss—your letter, your… awakening, and what comes next for you. </div></div>
Her tone is steady, reassuring, the kind used by someone who has guided countless young mages through their first steps into the magical world.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Do you have any questions for me before we move on? </div></div>
[[Hexmoor Academy]]--------[[Her]]--------[[My Parents]]--------[[Move On]]<<set $returnPassage = passage()>><<run addRelationship("Professor Clarissa Hawthorne", 38, "human")>>
She settles into the chair across from you, posture straight but not rigid, hands folding neatly atop the table. The hum of the pub fades into the background as her attention focuses on you alone—calm, patient, expectant.
You don’t wait.
You can’t.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> What’s going on? Why am I here? </div></div>
She nods once, as though she anticipated exactly this.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> A fair question—and the right one to start with. This isn’t something anyone should be expected to navigate alone. That’s why I contacted you. </div></div>
She opens a slim parchment folder, revealing carefully organised documents and notes.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You’ve been accepted to Hexmoor Academy, but your situation is… unusual. You weren’t raised with any understanding of the mage world, and that means you’ll need guidance. </div></div>
Her voice softens slightly—still firm, still professional, but undeniably kind.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m here to give you that guidance. And to answer every question you’re ready to ask. </div></div>
[[Hexmoor Academy]]--------[[Her]]--------[[My Parents]]--------[[Move On]]
<<set $returnPassage = passage()>>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Could you… tell me more about the Academy? What it actually is? </div></div>
Professor Hawthorne relaxes slightly, as if this is the question she always expects first.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hexmoor Academy is the primary institution for adult magical education in the UK. Students arrive between eighteen and twenty-five, once their magical signatures have stabilised. You’ll learn spellcraft, magical ethics, elemental manipulation, defensive arts, and applied theory. </div></div>
She taps the folder lightly.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It’s demanding, yes. But it’s also one of the safest environments for awakening mages to grow without harming themselves—or others. The curriculum is structured, but the journey is your own. </div></div>
[[Her]]--------[[My Parents]]--------[[Move On]]<<set $returnPassage = passage()>>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> What about you? What do you actually… do? </div></div>
A small smile tugs at the corner of her mouth—subtle, but genuine.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m a Senior Mentor and one of the Academy’s specialist instructors. My focus is magical regulation, awakening assessment, and early skill development. I’m usually the first point of contact for new mages who weren’t raised in the gifted world. </div></div>
She pauses—measured, thoughtful.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m here to make your transition structured, safe, and as painless as possible. The gifted world can be… overwhelming. You won’t face it alone. </div></div>
[[Hexmoor Academy]]--------[[My Parents]]--------[[Move On]]<<set $returnPassage = passage()>>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> My parents… they never told me anything about magic. Why didn’t they? What does that mean? </div></div>
Professor Hawthorne’s expression softens immediately.
Not with pity—
but with the kind of careful respect reserved for painful truths.
She closes the folder gently, giving you her full attention.
<<if $bloodstatus is "Arcane-Locked">>
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Arcane-Locked individuals are born to non-gifted parents. Your parents couldn’t have told you anything—the Veil prevents non-gifted minds from recognising magic clearly. Any signs you showed would have softened into harmless coincidences. Their silence wasn’t a decision. It was the world they lived in. </div></div>
<<elseif $bloodstatus is "Mixed-Line">>
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mixed-Line families are varied. Sometimes one parent is gifted and the other non-gifted, and the gifted parent chooses not to reveal their world—out of caution, fear, or promises made long ago. Other times, magical bloodlines lie dormant for generations until someone like you awakens them again. <br><br> Whatever the case, their silence wasn’t a judgement on you. It was a consequence of circumstance… or of choices you never got to hear explained. </div></div>
<<elseif $bloodstatus is "Deepborn">>
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Deepborn heritage usually comes with tradition—and heavy expectations. If your parents kept it from you, it wasn’t accidental. It means there were reasons: protection, exile, fractured lineage… or something in your family history they didn’t want resurfacing. Whatever they were carrying, they carried it alone to the end. </div></div>
<<else>>
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Whatever your past holds, you won’t have to face it alone. </div></div>
<</if>>
She pauses—not withdrawing, but offering space.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m sorry you never had the chance to ask them. But their absence doesn’t end your story. You still deserve answers—and I will help you find them. </div></div>
[[Hexmoor Academy]]--------[[Her]]--------[[Move On]]
<<set $returnPassage = passage()>>
Professor Hawthorne watches you for a long, steady moment—long enough for the silence to settle, but not long enough for it to become uncomfortable. Her expression remains composed, but there’s a gentleness behind it now, something steadier, more grounded.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That’s quite a lot for one morning. If you have more questions later, ask them. But for now… I think that’s enough. </div></div>
You open your mouth—instinct, habit, confusion, all trying to rise at once—
but nothing comes out.
Not because you’re silenced,
but because you realise she’s right.
Your chest feels a little too full, your thoughts stretched thin.
Everything she’s told you is already pressing hard against the edges of what you can process.
You manage a small nod.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> …Yeah. No more questions. Not right now. </div></div>
A faint, approving warmth touches her features—subtle, but genuine.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good. Then let’s move forward. You need supplies, orientation, and a proper introduction to the gifted world. </div></div>
She retrieves a slim parchment envelope from her satchel and places it between you both.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This will help you get started. And I’ll be with you for the first steps—you won’t be navigating this alone. </div></div>
Her voice gains a subtle firmness, a quiet confidence that settles into your chest like a weighted blanket.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> When you’re ready… we’ll head to the market district. It’s time you saw where the gifted world hides. </div></div>
The room feels different now—
not smaller, not quieter,
but somehow clearer.
[[Your path is beginning.]]
<<if !$questGiven_Lineage>>
<<set $questGiven_Lineage = true>>
<<run addQuest(
"Trace Your Lineage",
"Professor Hawthorne promised to help me uncover the truth.",
[
"Speak with Hawthorne when the time is right",
"Follow any clues she reveals",
"Piece together what my parents never told me"
]
)>>
<</if>><<set $returnPassage = passage()>>
You take a slow breath, steadying yourself.
The envelope sits between you and Hawthorne like a quiet invitation—
not a command, not a demand—just a door waiting for you to walk through it.
You close your fingers around it.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> …I’m ready. </div></div>
Hawthorne nods once, a subtle but approving gesture, then rises smoothly from her seat.
She adjusts her coat, retrieves her satchel, and gestures toward the door with a quiet, confident sweep of her hand.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Then stay close. The market district isn’t far—but getting to it is a different matter. </div></div>
You follow her toward the front of the pub.
A few patrons glance up as she passes—recognition, respect, maybe even relief—
but no one stops her.
The barkeep gives a small nod, one Hawthorne returns without breaking stride.
When she reaches the door, she pulls it open and steps out into the muted London afternoon.
You step out after her—
and the air shifts immediately.
The familiar noise of the city rolls around you…
but there’s something different, something faintly charged beneath it,
a quiet hum that wasn’t there before.
Hawthorne stands at the edge of the pavement, watching the flow of people and traffic with the kind of ease that suggests she already knows where you’re going… and where you’re not.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The gifted world doesn’t sit in plain sight. It bends. It hides. It waits for those who know how to look. </div></div>
She turns her head slightly, grey-green eyes settling on you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> And today, you learn how to look. </div></div>
She steps off the curb, coat trailing behind her as she heads into the bustling street.
You tighten your grip on the envelope and follow.
[[Follow Professor Hawthorne]]<<set $returnPassage = passage()>>
You keep close to Hawthorne as she weaves through the crowds, her stride purposeful but unhurried. She doesn’t check to see if you’re keeping up—she simply expects that you will.
London blurs around you—traffic noise, hurried footsteps, the faint smell of coffee drifting from a nearby café. Everything feels ordinary, painfully ordinary, until Hawthorne slows beside a narrow storefront squeezed between a locksmith and a discount pharmacy.
It’s a tired, glass-front charity shop.
Mannequins in outdated clothes stand in the dusty window display. Posters curl at the edges. A handwritten sign advertises a sale on mismatched dinnerware.
Completely unremarkable.
Except… it isn’t.
The reflection in the window is wrong.
Your reflection lags behind your movements.
The pavement behind you bends at an impossible angle.
And the shop interior reflected in the glass is different from the one visible through it.
Your chest tightens.
Hawthorne notices the exact moment you sense it.
A subtle, approving flicker crosses her expression.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good. Most non-gifted walk straight past this place. Veilwork relies on what the mind expects. Yours isn’t falling for it. </div></div>
She steps closer—not touching the glass—just raising her hand a few centimetres away from it.
A resonant vibration hums through the air.
The reflection shivers—
like a disturbed pond surface trying to settle.
Then it stills again…
waiting.
Hawthorne tilts her head toward the distorted surface.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Veils respond to resonance—intent, potential, the spark you carry. This one is listening. </div></div>
Your pulse quickens.
You raise your hand and—before you make contact—the surface bends inward.
[[Continue|Veil_Opens]]<<set $returnPassage = passage()>>
<<run $("#inventoryBtn").show();>><<set $showInventory = true>>
The glass ripples inward, folding around your presence like fabric collapsing toward heat.
A thin vertical seam splits the reflection—dark, soft, impossibly deep.
Light leaks through the gap from somewhere beyond, warm and golden, carrying faint notes of parchment, herbs, and something metallic.
The seam widens at your nearness, responding to you alone.
Hawthorne studies the reaction, and for the first time today, true approval warms her expression.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> First try. That’s more than uncommon—it’s promising. </div></div>
The seam blossoms outward, unfurling into a tall doorway made of sliding light and shadow.
No hinges. No frame.
Just possibility shaped around your presence.
Your breath catches as you step through—
—into a marketplace alive with magic.
Cobblestones warm beneath your feet.
Floating lanterns drift lazily overhead.
Shops tilt at impossible angles yet feel welcoming.
Steam rises from potion stalls.
Glass charms chime on invisible breezes.
People notice you:
A robed mage pauses mid-gesture.
A pair of students whispers urgently.
A vendor glances over, assessing, curious.
Hawthorne stands beside you, her presence grounding the sudden rush of sensation.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome to the Hexmarket District. Your first true step into our world. </div></div>
She gestures toward the winding rows of stalls and enchanted shopfronts.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Where would you like to begin? </div> </div>
[[I have no money]]<<set $returnPassage = passage()>>
<<run $("#inventoryBtn").show();>>
What do you want to do first?
<<if !$robesDone>>
[[Buy your robes]]
<<else>>
• Robes — ✔ Completed
<</if>>
<<if !$wandDone>>
[[Get your wand]]
<<else>>
• Wand — ✔ Completed
<</if>>
<<if !$booksDone>>
[[Purchase your textbooks]]
<<else>>
• Textbooks — ✔ Completed
<</if>>
<<if !$petsDone>>
[[Look at pets]]
<<else>>
• Creature Companions — ✔ Completed
<</if>>
<<if $robesDone and $wandDone and $booksDone and $petsDone>>
[[Continue|Everything purchased]]
<</if>>
<<set $returnPassage = passage()>>
You turn down a quieter lane of the Hexmarket, where cloth banners sway despite the still air.
A sign carved into dark wood hangs above a narrow doorway:
THATCH & THREAD
Robemakers for the Gifted World
Hawthorne stops just behind you, her voice low but warm.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You’ll need your full uniform. Robes, cloak, gloves, the lot. </div></div>
You push open the door.
Warm lavender-scented air envelopes you.
Floating bolts of fabric drift around the shop like slow-moving constellations.
Measuring tapes whip through the air with alarming enthusiasm.
A wiry tailor emerges from behind a mannequin, eyes bright and sharp.
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Student? Unsorted? Excellent. Step into the light — I need to see your aura. </div></div>
You comply, stepping onto a faintly glowing circle on the floor.
Immediately, your reflection in a nearby mirror flickers—
your outline shifting into faint colours:
embers of orange, streaks of violet, flickers of blue, ripples of green.
Thatch’s eyebrows jump.
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Oh, you’re lively. Reactive resonance before sorting? That’s… rare. </div></div>
A tape measure darts around you and on it's own a quill takes notes on a floating clipboard.
<<if $height < 64>> <!-- under 5'4" -->
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Compact frame. Excellent. Robes flow better on those closer to the ground — fewer trip hazards. </div></div>
<<elseif $height < 70>> <!-- 5'4" to 5'9" -->
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Average height. Easy work — most of the mannequins are built for your proportions. </div></div>
<<else>> <!-- taller than 5'10" -->
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tall. Very tall. I’ll need to lengthen the hem—don’t look so smug, it’s extra threadwork. </div></div>
<</if>>
<<switch $bodyType>>
<<case "Average">>
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Average build — reliable proportions. Robes love people like you; they behave themselves. </div></div>
<<case "Slim">>>
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Slim frame — elegant lines, minimal bunching. Robes will drape like you’re walking through a portrait. </div></div>
<<case "Athletic">>>
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Athletic structure — good posture, controlled stance. The fabric will try to match your discipline. </div></div>
<<case "Broad">>>
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Broad build — strong shoulders. I’ll reinforce the seams; broad students tend to look heroic without trying. </div></div>
<<case "Curvy">>>
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Curved silhouette — excellent. The robes will follow your shape naturally; you’ll look like a catalogue model. </div></div>
<</switch>>
A set of jet-dark robes floats toward you.
Only when they pass under the lanternlight do you see the truth:
The seams shift colour — the same cycle as your aura.
Soft, subtle, never settling.
[[Reactive House Robes.]]<<set $returnPassage = passage()>>
You and Hawthorne wind through the Hexmarket’s lantern-lit paths until she stops before a narrow storefront wedged between a potion brewer and a rune-engraver.
Its sign reads:
SOLIVAN ARCTURUS — ARTISAN OF CHANNELING INSTRUMENTS
_Not wands. Instruments._
Inside, the air smells of resin, ozone, and something faintly metallic—like the breath before lightning strikes.
The room is dim, lit by glass orbs that pulse in slow, rhythmic waves.
Not a single wand is on display.
Instead:
wood samples suspended in levitation rings,
cores sealed in crystal vials,
twisting diagrams burned into slate walls.
A man steps from the back room—tall, silver-streaked hair tied at the nape, goggles pushed up onto his forehead. His coat is layered with tool loops, etched spellplates, and faint scorch marks.
He looks you over with a sharp, discerning gaze.
<div class="dialogueBox"> <div class="speakerName">Solivan Arcturus</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You’re new. Good. New mages don’t come in here with bad habits. </div></div>
Hawthorne inclines her head in greeting—but Solivan barely acknowledges her. His attention has zeroed in entirely on you.
He gestures to a circular platform embedded in the floor.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Stand in the locus. Don’t touch anything. Don’t flinch. And whatever happens—don’t try to direct the magic. </div></div>
Hawthorne murmurs:
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Trust the process. Arcturus is the best in the district. </div></div>
[[Step into the circle]]<<set $returnPassage = passage()>>
The farther you follow the quiet lanes of the Hexmarket, the more the world seems to soften around you — lanterns dimming, voices thinning, until you reach a narrow storefront nestled between two leaning buildings.
A wooden sign dangles overhead, etched in curling script:
INKWELL & IVY
Textbooks • Tomes • Arcane Reference
Hawthorne rests a hand briefly on your shoulder.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Everything you’ll need for your first year is inside. I’ll wait near the entrance — go on. </div></div>
You step through the door.
Warm, dusty air surrounds you, carrying the smell of old parchment and spell-ink. Shelves tower overhead, each one bowed under the weight of dense tomes and shimmering manuals. A few books hover on their own, drifting lazily until they slide back into place with quiet satisfaction.
You find a section labelled **First-Year Curriculum** and begin pulling the required titles:
- **The Principles of Channelcraft** — Marwen Alderholt
- **Runic Logic: Foundations of Ancient Script** — Orin Feldwright
- **Elemental Dynamics & Natural Forces** — Elyra Thorn
- **Fundamentals of Alchemy & Mixturecraft** — Rowan Vell
- **A Field Guide to Common & Uncommon Creatures** — Dr. Lyneth Marrow
- **Applied Charms & Everyday Spellforms** — Cillian Drex
- **Protective Magics & Countermeasures** — Seraphine Locke
- **Transmutation Theory for Adult Practitioners** — Idris Calder
- **The History of Arcane Governance in the United Kingdom** — Dorian Merriweather
Your arms are nearly full by the time you reach for the final book.
Your hand brushes someone else’s.
A warm, solid touch — electric with surprise.
Both of you jerk back at once, your books wobbling in your grasp.
A loose parchment slips between you and drifts to the floor.
You look up.
A figure stands beside you —
another student, robes already fitted, expression caught between embarrassment and intrigue.
They look like they hadn't expected anyone to be here either.
The moment hangs lightly in the air —
awkward, warm, and strangely grounding.
Your pulse picks up.
<br><br>
[[You see a woman]]<<set $returnPassage = passage()>>
The Hexmarket grows louder and stranger as you follow a narrow lane lined with brass lanterns and floating parchment signs.
A storefront catches your eye immediately.
Its sign is carved from driftwood, painted with looping script:
THE MENAGERIE OF MUNDANE & MYSTICAL BEASTS
— Licensed Familiar Breeder —
Warm light spills from the doorway. A soft chime rings as you step inside.
The scent hits you first — wood shavings, herbal feed, a faint spark of ozone.
The interior hums with quiet life.
Rows of enchanted enclosures line the walls: floating terrariums, rune-bound perches, softly glowing habitat spheres. Each one houses something alive… and curious.
A fox-sized creature made entirely of smoke curls lazily in its glass dome.
Tiny winged felines nap in a hammock of woven starlight.
A pair of miniature drakes snort harmless sparks at each other.
A middle-aged mage in apricot-coloured robes looks up from behind the counter.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> First-year, are you? New students usually come wide-eyed. </div></div>
They gesture around the shop.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Take your time. A familiar chooses *you*, not the other way around. </div></div>
You wander the aisles, feeling dozens of small gazes turn toward you — assessing, curious, quietly hopeful.
[[Look at the creatures|Choose a Pet]]<div class="inventory-page">
<h2>Inventory</h2>
<div class="inventory-grid">
<!-- GOLD IS ALWAYS FIRST -->
<div class="inventory-slot inventory-gold">
<div class="inventory-slot-name">
Gold
</div>
<div class="inventory-slot-amount">
<<print $gold>> G
</div>
</div>
<!-- ITEMS -->
<<if $inventory && $inventory.length > 0>>
<<for _item range $inventory>>
<div class="inventory-slot">
<div class="inventory-slot-name">
<<= _item>>
</div>
<div class="inventory-slot-amount">
x<<= $inventoryQuantities[_item]>>
</div>
</div>
<</for>>
<</if>>
</div>
<<if !$inventory || $inventory.length === 0>>
<div class="inventory-empty">
You have no other items yet.
</div>
<</if>>
</div>
<br>
<<link "Return">>
<<goto $returnPassage>>
<</link>><<set $returnPassage = passage()>>
The marketplace hums around you—warm cobblestones underfoot, drifting lanterns overhead, and winding rows of stalls that glow with subtle magic.
Hawthorne watches your reaction for a moment before reaching into her coat.
She withdraws a small leather pouch, tied neatly with dark cord, and places it into your hand.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your starter allowance. Hexmoor Academy provides funding to ensure every new student can afford their essential supplies. </div></div>
The pouch has a satisfying weight, the coins inside shifting softly as you close your fingers around it.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> How much is this? </div></div>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> How much is this? </div></div>
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Enough to cover robes, books, wandwork materials, and a few extras—if you’re careful. </div></div>
<<if $bloodstatus == "Mixed-Line" or $bloodstatus == "Deepborn">>
[[Inheritance]]
<<else>>
[[Thank her|Hawthorne_Grateful]]---[[Look confused|Hawthorne_Confused]]---[[Feel awkward|Hawthorne_Awkward]]---[[Look annoyed|Hawthorne_Ungrateful]]
<</if>>
<<if !$starterAllowanceGiven>>
<<run addGold(50, "Hexmoor starter allowance")>>
<<set $starterAllowanceGiven = true>>
<</if>><<set $returnPassage = passage()>>
<<if $bloodstatus == "Mixed-Line">>
Hawthorne’s expression softens.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your family left behind a small mundane inheritance. Nothing magical—but still yours. </div></div>
<<if !$inheritanceGiven>>
<<run addGold(25, "Family inheritance")>>
<<set $inheritanceGiven = true>>
<</if>>
<<elseif $bloodstatus == "Deepborn">>
A flicker of respect touches her features.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Deepborn families tend to plan ahead. Your parents left behind a meaningful inheritance. Use it responsibly. </div></div>
<<if !$inheritanceGiven>>
<<run addGold(50, "Family inheritance")>>
<<set $inheritanceGiven = true>>
<</if>>
<</if>>
[[Thank her|Hawthorne_Grateful]]---[[Look confused|Hawthorne_Confused]]---[[Feel awkward|Hawthorne_Awkward]]---[[Look annoyed|Hawthorne_Ungrateful]]
<<set $returnPassage = passage()>> <<set $hawthorneFirstImpression = "grateful">>
You tighten your grip on the pouch, feeling the weight of what she and the Academy are offering you.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Thank you… really. I know you didn’t have to explain all of this. </div></div>
Hawthorne’s expression softens in a way that feels rare—genuine, warm beneath her composed exterior.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You’re welcome. And you’re not alone in this. Guidance is part of my role—one I take seriously. </div></div>
[[Hexmarket]]
<<set $returnPassage = passage()>> <<set $hawthorneFirstImpression = "confused">>
You blink down at the pouch, bewilderment pushing through you.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I… don’t really understand why I’m getting all this. It doesn’t feel real. </div></div>
Hawthorne tilts her head slightly, evaluating you with sharp but empathetic eyes.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Confusion is expected. Your life shifted very quickly. But every coin in that pouch is yours—earned by circumstance, lineage, or school support. </div></div>
She steps a little closer, her voice steady and grounding.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Take a breath. Let the world be strange for now. Understanding will come with time. </div></div>
[[Hexmarket]]
<<set $returnPassage = passage()>><<set $hawthorneFirstImpression = "awkward">>
Your mouth opens—then closes—your brain seemingly unable to choose a reaction.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Uh… wow. Okay. I don’t really know what I’m supposed to… say? </div></div>
A tiny flicker of amusement touches Hawthorne’s lips—barely visible, but unmistakable.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You don’t need to say anything. Most new mages freeze the first time I hand them funding. </div></div>
Her voice softens, just a fraction.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just breathe. And try not to drop the pouch this time. </div></div>
[[Hexmarket]]
<<set $returnPassage = passage()>>
You take a moment to steady yourself.
Your robes, wand, textbooks, and new companion are all accounted for — the biggest parts of your list done.
But the Hexmarket is far from finished with you.
Small stalls and narrow shops weave together in a glittering maze, each one carrying something from your remaining list:
- glass phials
- brass scales
- your cauldron
- the non-reactive starter potions kit
- an enchanted timetable folio
Hawthorne guides you through the last stretch at a brisk but manageable pace.
No long lessons.
No surprises.
Just quiet efficiency.
A cauldron maker nods once and hands you a polished pewter model.
A charmwright fits your timetable folio to your signature in a flare of soft gold.
A potion vendor wraps your kit in waxed paper and tells you not to open anything inside without supervision.
Before long, your bags feel heavier — pleasantly so.
Hawthorne watches you adjust the weight on your shoulder and gives a small nod, the closest thing to approval she’s offered all day.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That’s everything. Your preparations are complete. </div></div>
She steps aside, allowing the view ahead to open.
The Hexmarket glows warmly before you — lanterns shifting, voices woven like threads of magic, the hum of possibility thrumming in the air.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Ready for your next step? </div></div>
[[Continue|Finish Up]]
<<if !$generalEquipmentBought>>
<<run addGold(-5, "General Equipment")>>
<<run addItem("General Equipment", 1)>>
<<set $generalEquipmentBought = true>>
<</if>><<set $returnPassage = passage()>><<set $hawthorneFirstImpression = "ungrateful">>
You take the pouch, weighing it in your palm, but the gesture feels hollow.
A strange irritation rises before you can stop it—sharp, defensive, misplaced.
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is… it? I’m just supposed to take this and pretend it fixes everything? </div></div>
Hawthorne goes still.
Not tense.
Not offended.
Just still—like a mage who has heard far worse from far more difficult students.
Her eyes narrow a fraction.
Barely noticeable, but unmistakably real.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> No. It doesn’t fix anything. It’s not meant to. </div></div>
She folds her hands, her voice shifting—
cool, measured, no longer soft or coaxing.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It’s support. A foundation. A start. Nothing more. </div></div>
There’s no anger in her tone—just a quiet firmness you feel in your chest.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You don’t have to be grateful today. But you do have to take responsibility for the path ahead. </div></div>
A subtle distance settles between you—not enough to push you away, but enough to remind you:
She expects more.
And she’ll hold you to it.
She turns, her coat shifting with the movement.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come along. The Hexmarket won’t wait forever. </div></div>
[[Hexmarket]]<<set $returnPassage = passage()>>
The ground hums.
Not a vibration—
a recognition.
Symbols flare beneath your feet, reacting to your presence rather than Solivan’s command.
A low, resonant tone builds in the air—the sound of magic listening.
Three objects rise from the surrounding pedestals:
- A shard of crystalline root
- A coil of pale, feather-fine metal
- A piece of stone veined with faint luminescence
All rotate slowly around you, orbiting like curious moons.
Solivan’s brows lift.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hm. That’s… unusual. They’re responding before I call them. </div></div>
He flips a switch.
A windless swirl of glowing motes tightens around your hands.
The three materials collide—
not violently, but with purpose—
merging in a slow, gravitational pull.
You feel a tug deep in your chest, a subtle click in the air—
like a lock turning.
Light flares.
When it fades, a wand floats before you:
**A spiraled wand of fused driftwood and crystallized marrow, wrapped with a metallic filament that pulses faintly with life.**
Alien. Beautiful.
Unmistakably yours.
Solivan’s face changes.
The man who moments ago looked bored is now staring at your wand with a scholar’s shock.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That shouldn’t be possible. </div></div>
He steps closer, inspecting it without touching.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Driftwood from the Beyondshore… Marrowstone from a ground-buried titan fossil… And that filament— that’s living aetheric metal. I haven’t seen it bond in twenty years. </div></div>
Hawthorne’s eyes flick sharply toward you.
Not fearful.
Not alarmed.
But wary.
And impressed.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your affinity is stronger than I expected. </div></div>
Solivan exhales through his teeth, low and deliberate.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Strong? No, Professor—this is something else entirely. </div></div>
He gestures for you to take the wand.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Go on. I want to see what it does to the air when you hold it. </div></div>
[[Pick up the wand]]<<set $returnPassage = passage()>>
The moment your fingers brush the wand’s surface, a pulse snaps through the air—
soundless, but not quiet.
Your breath stutters.
The world sharpens.
The wooden spiral beneath your fingertips feels warm, almost alive.
The crystallized segments shimmer faintly, like breath misting across glass.
And the metallic filament?
It moves.
Subtle, serpentlike, tightening a fraction around the wand’s core as if greeting you.
A soft ring of light expands outward from your hand, rippling the air like a stone dropped in perfectly still water.
Solivan inhales sharply.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That— that’s resonance. On contact. I haven’t seen that in decades. </div></div>
The light fades, leaving a lingering hum beneath your skin, as though a second heartbeat has settled into your palm.
Hawthorne watches closely—too closely.
Her eyes narrow with thoughtful caution, and a flicker of something unreadable passes through them.
Not fear.
Not worry.
Recognition.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Steady. Let it settle. A wand like that meets you before you meet it. </div></div>
She steps closer, voice low.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tell me what you feel. </div></div>
The answer isn’t simple.
The wand feels like—
- a quiet storm held in stillness
- your emotions reflected back at you
- a weight and a warmth that isn’t yours but fits you anyway
- something ancient waking up
[[You lift it slightly.]]<<set $wandDone = true>>
<<run addGold(-10, "Wand purchase")>>
<<run addItem("Ancient Wand", 1)>>
<<goto "Hexmarket">><div>
<label>House:</label>
<select data-var="$house">
<option>Emberfall</option>
<option>Nightbloom</option>
<option>Skyreach</option>
<option>Mossgren</option>
<option>Unselected</option>
</select>
</div><<set $robesDone = true>>
<<run addGold(-15, "Purchased Hexmoor Uniform")>>
<<run addItem("School Clothes", 1)>>
<<goto "Hexmarket">><<set $playerFriend to "Alexis">> <<set $returnPassage = passage()>>
She’s young — around your age, maybe eighteen — and dressed in plain unsorted student robes.
A faint shimmer at the trim marks her as someone awaiting house placement, same as you.
Her hair falls in a loose wave over one shoulder, dark with a faint copper sheen where the lanternlight touches it. Her expression is open, warm, but also a touch embarrassed at the collision of hands.
Then she smiles — small, apologetic, but genuine.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sorry — I wasn’t watching where I was reaching. First-year nerves. Or… book-related ambush. Could go either way. </div></div>
She tucks a loose strand of hair behind her ear.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m Alexis. My mum’s non-gifted, but my dad’s Deepborn, so… I sort of grew up knowing this stuff existed. Never got to *do* any of it, though. </div></div>
She glances over the titles in your arms.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Looks like we’re in a similar boat — total beginners with just enough knowledge to be dangerous. </div></div>
Her eyes warm a little, curious — not flirty, not bold, just open to connection.
<br><br>
[[Talk to Alexis more]]<div style="text-align:center;">
<h2>Alexis Vale</h2>
</div>
Age: 18
House: <<print $alexisHouse>>
Year: First Year
Pronouns: She/Her/Hers
Relation to you: <<print $alexisRelation>>
Height & Build: 5'9"; slim-athletic, relaxed posture with quiet confidence
Face: Thoughtful features; steady slate-blue eyes that track every detail
Hair: Dark brown, straight, shoulder-length; falls into her eyes when lost in thought
Skin: Soft beige with a faint natural flush
Expression: A calm half-smile — like she already understands more than she says
Clothing: Practical student robes lined subtly with Nightbloom violet; messenger satchel ink-smudged and well-used
Breast Size: Moderate, proportional
Hips & Figure: Light curve at the waist, balanced frame
Arse: Softly rounded, understated
Genitals: <<print $alexisGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>><<run addRelationship("Alexis Vale", 18, "human")>>
You shift your books in your arms and Alexis steps a little closer, her expression brightening now that the initial awkwardness has passed.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So… are you excited? Terrified? Somewhere in the middle? I’ve been trying to pretend I’m calm but, uh— <i>gestures vaguely at the floating books</i> —everything is a lot. </div></div>
She laughs softly, embarrassed but trying.
[[Be friendly|AlexisFriendly]]---[[Be flirty|AlexisFlirty]]---[[Stay neutral|AlexisNeutral]]<<set $alexisAffinity += 1>><<set $returnPassage = passage()>>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Honestly? Same. But it’s nice knowing someone else is in the same boat. </div></div>
Her shoulders ease a little, warmth spreading through her expression.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Yeah. Feels less scary when you’re not alone in it. Maybe we’ll survive first term together. </div></div>
[[Hawthorne notices you talking|HawthorneSeesYou]]<<set $returnPassage = passage()>><<set $alexisAffinity += 2>>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I think I’m doing fine now. Meeting you helped. </div></div>
Alexis blinks—
then colour rises in her cheeks, subtle but unmistakable.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Oh. Well… that’s— I mean— thank you. </div></div>
She tucks her hair behind her ear again, suddenly flustered in a way that’s very, very cute.
[[Hawthorne notices you talking|HawthorneSeesYou]]<<set $returnPassage = passage()>><<set $alexisAffinity += 0>>
<div class="dialogueBox"> <div class="speakerName">You</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I’m just trying to get through the book list. One thing at a time. </div></div>
She nods quickly, not offended—
just unsure how much you want to engage.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Right. Makes sense. I’ll let you focus then. </div></div>
[[Hawthorne notices you talking|HawthorneSeesYou]]<<set $returnPassage = passage()>>
As you move toward the front counter, Professor Hawthorne’s eyes rise from her quiet examination of a shelf of sealed tomes.
She watches you for a moment — long enough to read the tone of your conversation with Alexis or Alex carried in the set of your shoulders.
<<if $alexisAffinity = 0>>
Her expression remains even, patient.
<<elseif $alexisRelationship = 1>>
Her gaze softens with quiet approval.
<<else>>
One brow lifts by the smallest fraction, not reprimanding, simply… noticing.
<</if>>
She steps aside just enough to give you space to approach the counter.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come along, then. You’ll need to pay for your books before we continue. </div></div>
Her tone is steady, guiding — an anchor in the overwhelming thrum of the Hexmarket.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Once that's done, we can move on to your next stop. </div></div>
She gestures toward the front counter, where an elderly mage with silver spectacles is already looking up expectantly.
[[Pay for your books|PayBooks]]<<set $returnPassage = passage()>>
You carry your stack of books to the counter.
The elderly shopkeeper adjusts his silver spectacles as you set them down, his gaze flicking neatly across each title.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> First-year curriculum? Good. A solid foundation makes all the difference. </div></div>
He tallies the stack with a few swift strokes of his quill before giving a small, approving nod.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Total comes to twelve gold. Student rate, of course. Hexmoor tradition. </div></div>
You reach for your coin pouch.
The shopkeeper bundles your books with a simple length of twine and places them carefully on the counter.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Take care of them. Knowledge opens doors you may not recognise — yet. </div></div>
Hawthorne gestures lightly toward your payment pouch.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Go on. Settle your bill. Then we’ll continue. </div></div>
[[Pay the twelve gold|ProcessBookPurchase]]<<set $booksDone = true>>
<<run addGold(-12, "Books purchase")>>
<<run addItem("Year 1 Course Books", 9)>>
<<goto "Hexmarket">><<set $returnPassage = passage()>>
You slow as a few of the creatures stand out, their attention following your every movement.
**A list of potential familiars watches you intently:**
- **Aether Owl** — feathers like drifting mist, eyes glowing soft silver
- **Ember Hound Pup** — small, warm, tail flickering like a candle flame
- **Mossback Tortoise** — tiny, ancient-eyed, shell covered in blooming moss
- **Starlit Cat** — fur shimmering like constellations when it moves
The shop quiets around you — or perhaps it’s just your heartbeat growing louder.
A familiar bond begins here… if you choose to form one.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Go on, then. Which one calls to you? </div></div>
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> And don't worry I will keep which ever you choose until you are leaving for your home. </div></div>
[[Choose the Aether Owl]]---[[Choose the Ember Hound Pup]]
[[Choose the Mossback Tortoise]]---[[Choose the Starlit Cat]]<<set $returnPassage = passage()>>
The Aether Owl tilts its head as you step closer, its form shimmering like moonlit fog.
Up close, it’s even stranger — feathers dissolve at the edges like drifting mist before reforming in soft pulses of light.
It studies you with silver, liquid eyes… then glides forward and presses its cool, weightless forehead to your hand.
A soft ripple moves through your skin.
Like the hush of a winter night settling in your bones.
The shopkeeper’s breath catches.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Aether owls choose clarity. Or… the potential for it. That one sees something in you. </div></div>
The owl climbs your forearm, settling with ghostlike lightness on your shoulder.
It hoots once — soft, melodic.
Like a question.
A name.
<div>
<label><strong>Name your Aether Owl</strong></label><br>
<input type="text" id="petNameInput" placeholder="Enter name">
</div>
<div id="petNameError" style="color: red; margin-top: 5px;"></div>
<br>
<<button "Confirm">>
<<script>>
var name = document.getElementById("petNameInput").value.trim();
if (!name) {
document.getElementById("petNameError").innerHTML = "Please enter a name.";
} else {
// Save pet info
State.variables.petName = name;
State.variables.petType = "Aether Owl";
State.variables.petsDone = true;
// Gold + Notification
addGold(-8, "Pet Purchase");
// Add relationship entry for the pet
State.variables.petInfoPassage = State.variables.petName;
addRelationship(name, 0, "pet");
// Continue
Engine.play("Hexmarket");
}
<</script>>
<</button>><<set $returnPassage = passage()>>
The Ember Hound Pup spots you instantly — its tiny tail flickering like a candle flame as it bounds straight toward your legs.
It skids to a stop, nose warm against your hand, eyes molten amber and shining with unmistakable excitement.
When you pet it, gentle embers rise from its fur — drifting harmlessly like sparks from a hearth.
Heat rolls up your arm, comforting and steady.
The shopkeeper chuckles.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Oh, that one’s picked you already. Ember pups bond fast — especially to mages with strong hearts. </div></div>
The pup sits beside you, tail flicking tiny sparks that dissolve before hitting the floor.
It nudges your hand again.
Waiting for a name.
<div>
<label><strong>Name your Ember Hound Pup</strong></label><br>
<input type="text" id="petNameInput" placeholder="Enter name">
</div>
<div id="petNameError" style="color: red; margin-top: 5px;"></div>
<br>
<<button "Confirm">>
<<script>>
var name = document.getElementById("petNameInput").value.trim();
if (!name) {
document.getElementById("petNameError").innerHTML = "Please enter a name.";
} else {
// Save pet info
State.variables.petName = name;
State.variables.petType = "Ember Hound Pup";
State.variables.petsDone = true;
// Gold + Notification
addGold(-8, "Pet Purchase");
// Add relationship entry for the pet
State.variables.petInfoPassage = State.variables.petName;
addRelationship(name, 0, "pet");
// Continue
Engine.play("Hexmarket");
}
<</script>>
<</button>><<set $returnPassage = passage()>>
The Mossback Tortoise sits quietly in its terrarium, moss-covered shell glowing with soft green luminescence.
Unlike the other creatures, it doesn’t rush to meet you — it simply *observes*.
But when you kneel, it begins a slow, determined walk toward your hand.
It presses its tiny head gently against your fingers.
Warmth spreads through you — earthy, grounding, like standing barefoot in rain-soaked soil.
Tiny white blossoms sprout from the moss along its shell.
The shopkeeper hums approvingly.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossbacks bond to mages who need steadiness. Or to those who already carry it. </div></div>
The tortoise nestles calmly into your palm.
Your heartbeat settles.
It looks up as though waiting… patiently… for a name.
<div>
<label><strong>Name your Mossback Tortoise</strong></label><br>
<input type="text" id="petNameInput" placeholder="Enter name">
</div>
<div id="petNameError" style="color: red; margin-top: 5px;"></div>
<br>
<<button "Confirm">>
<<script>>
var name = document.getElementById("petNameInput").value.trim();
if (!name) {
document.getElementById("petNameError").innerHTML = "Please enter a name.";
} else {
// Save pet info
State.variables.petName = name;
State.variables.petType = "Mossback Tortoise";
State.variables.petsDone = true;
// Gold + Notification
addGold(-8, "Pet Purchase");
// Add relationship entry for the pet
State.variables.petInfoPassage = State.variables.petName;
addRelationship(name, 0, "pet");
// Continue
Engine.play("Hexmarket");
}
<</script>>
<</button>><<set $returnPassage = passage()>>
The Starlit Cat lounges atop a floating night-silk cushion, fur rippling with drifting constellations.
When your shadow falls across it, its eyes open — glowing like distant galaxies.
It studies you.
Long.
Silent.
Too intelligent.
Then it moves.
In one impossibly light leap, it lands on your shoulder, tail curling behind your neck like a ribbon of stardust.
A hum fills the air — a purr that resonates like a tuning fork struck by moonlight.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Well now… Starlit Cats don’t attach themselves to just anyone. Looks like you’ve been chosen. </div></div>
The cat nuzzles your jaw, constellations shifting in its fur as it looks directly into your eyes.
Waiting.
Ready for its name.
<div>
<label><strong>Name your Starlit Cat</strong></label><br>
<input type="text" id="petNameInput" placeholder="Enter name">
</div>
<div id="petNameError" style="color: red; margin-top: 5px;"></div>
<br>
<<button "Confirm">>
<<script>>
var name = document.getElementById("petNameInput").value.trim();
if (!name) {
document.getElementById("petNameError").innerHTML = "Please enter a name.";
} else {
// Save pet info
State.variables.petName = name;
State.variables.petType = "Starlit Cat";
State.variables.petsDone = true;
// Gold + Notification
addGold(-8, "Pet Purchase");
// Add relationship entry for the pet
State.variables.petInfoPassage = State.variables.petName;
addRelationship(name, 0, "pet");
// Continue
Engine.play("Hexmarket");
}
<</script>>
<</button>><div class="relationships-page">
<h2>Relationships</h2>
<div class="relationships-grid">
<<for _key, _rel range $relationships>>
<<set _relName = _rel.name>>
<<set _relType = _rel.type>>
<<capture _relName _relType>>
<div class="relationship-slot">
<div class="relationship-slot-name">
<<if _relType === "pet" || _relType === "companion">>
<<link _relName>>
<<goto PetProfile>>
<</link>>
<<else>>
<<link _relName>>
<<goto _relName>>
<</link>>
<</if>>
</div>
<div class="relationship-slot-type">
<<if _relType === "pet">>
Creature
<<else>>
Person
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
</div>
<br>
<<link "Return">>
<<goto $returnPassage>>
<</link>><div style="text-align:center;">
<h2><<print $petName>> — <<= $petType >></h2>
</div>
<<if $petType == "Aether Owl">>
Species: Aether Owl
Classification: Arcane-Linked Avian
Appearance: Feathers shimmer like pale mist; edges waver like moonlit fog
Temperament: Calm, perceptive, drawn to clarity and quiet minds
<<elseif $petType == "Ember Hound Pup">>
Species: Ember Hound Pup
Classification: Fire-Aligned Familiar
Appearance: Warm ember-like fur; paws glow faintly when excited
Temperament: Loyal, excitable, fiercely protective
<<elseif $petType == "Mossback Tortoise">>
Species: Mossback Tortoise
Classification: Earthbound Familiar
Appearance: Moss-covered shell; earthy scent; slow-lidded golden eyes
Temperament: Steady, peaceful, grounding
<<elseif $petType == "Starlit Cat">>
Species: Starlit Cat
Classification: Astral-Feral Familiar
Appearance: Fur dotted with drifting specks of starlight
Temperament: Curious, elusive, intelligent
<<else>>
You do not currently have a pet.
<</if>>
<br><br>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>>
The world snaps inward—
light spiralling, sound thinning, your companion clinging close as everything collapses into a bright turning point—
—and then the ground returns beneath your feet.
Your bedroom.
Still. Familiar. Quiet.
The air ripples softly as the magic settles. Your companion adjusts in your arms, then nestles closer.
Hawthorne stands beside you, utterly composed.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hexmoor opens its gates on the first of September.<br> I’ll collect you the day before term begins. </div></div>
She pauses.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your letter mentioned Briarwick Station. That is the usual arrangement for first-years.<br><br> Given your circumstances, I’ll be taking you to Hexmoor personally. </div></div>
The words <em>your circumstances</em> linger for a moment.
Your bags materialise neatly onto your bed.
Hawthorne’s expression turns firm.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Until then, do not attempt magic outside Hexmoor grounds.<br> You are untrained, unlicensed, and the safeguards protecting non-gifted society apply to you as well. </div></div>
Your companion presses closer—
<<if $petType == "Aether Owl">>
emitting a soft, breathy *hoot*.
<<elseif $petType == "Ember Hound Pup">>
letting out a warm, crackling *chirp*.
<<elseif $petType == "Mossback Tortoise">>
giving a slow *thump* against your chest.
<<elseif $petType == "Starlit Cat">>
releasing a faint, celestial *hum*.
<</if>>
The faintest smile touches Hawthorne’s lips.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Rest. Prepare. And leave the magic alone until I return. </div></div>
She raises one hand.
Light bends.
Air twists.
The spiral reforms—
and in a blink, she vanishes.
Leaving you alone with your companion, your supplies…
and the quiet truth that soon, you’ll be at Hexmoor Academy.
[[Wait for the day before term|Pre-Term Morning]]<<set $returnPassage = passage()>>
With your robes, wand, textbooks, and final bits of equipment packed away,
you finally let yourself breathe.
The weight on your shoulders feels good — earned, even.
Everything you need for Hexmoor is now securely in your hands.
Well… almost everything.
Hawthorne’s gaze shifts down the lane before you even speak.
The faintest tilt of her head tells you she already knows what’s missing.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> One last stop. Your companion should be ready. The shopkeeper has been watching them for you. </div></div>
You adjust your bags and head back toward the creature shop.
The bell above the door gives its soft little chime.
Inside, the shopkeeper looks up immediately — eyes bright, amused, and almost relieved.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Ah — perfect timing. They’ve been waiting for you the whole time. </div></div>
They gesture warmly toward your companion, who reacts the instant they see you:
<<if $petType == "Aether Owl">>
The **Aether Owl** unfurls in a drift of pale, mistlike feathers,
gliding straight to your arm with a soft pulse of silver light.
<</if>>
<<if $petType == "Ember Hound Pup">>
The **Ember Hound Pup** gives an excited yip,
tail flaring like a spark as it tumbles eagerly into your hands.
<</if>>
<<if $petType == "Mossback Tortoise">>
The **Mossback Tortoise** ambles forward with slow, ancient certainty,
moss blooming warmly across its back as it nudges your foot.
<</if>>
<<if $petType == "Starlit Cat">>
The **Starlit Cat** rises with elegant confidence,
its coat shimmering with faint constellations as it curls around your leg
before allowing you to lift it.
<</if>>
The moment you pick them up, everything settles into place.
Natural. Warm. Familiar — like they were only waiting for you to come back.
<div class="dialogueBox"> <div class="speakerName">Shopkeeper</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Take good care of them. And good luck at Hexmoor. </div></div>
You step back out into the Hexmarket.
Hawthorne stands waiting near the alley’s center,
her attention briefly flicking to your companion.
A small, quiet approval softens her features.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Keep them close. Transit spells can be disorienting the first time. </div></div>
She lifts a hand.
Light folds inward.
Air twists into a helix.
A spinning ring of clear, glasslike magic forms —
a perfect spiral suspended in midair.
Wind stirs at your feet.
Your companion presses closer to your chest.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> When the rings close — hold your breath. </div></div>
The spiral tightens.
Light bends.
The street tilts sideways—
And the world snaps into a single turning point.
[[Continue|Teleport]]
<<set $returnPassage = passage()>>
<div class="creator">
<div>
<label>Skin Tone:</label>
<select data-var="$skinTone">
<option>Pale</option>
<option>Fair</option>
<option>Light</option>
<option>Medium</option>
<option>Tan</option>
<option>Olive</option>
<option>Brown</option>
<option>Dark</option>
<option>Unselected</option>
</select>
</div>
<div>
<label>Hair Style:</label>
<select data-var="$hairStyle">
<option>Short Crop</option>
<option>Buzz Cut</option>
<option>Faded Undercut</option>
<option>Messy Fringe</option>
<option>Side-Parted Short</option>
<option>Wavy Medium</option>
<option>Shoulder-Length Straight</option>
<option>Curly Shoulder-Length</option>
<option>Layered Shag</option>
<option>Wolf Cut</option>
<option>Long Straight</option>
<option>Long Wavy</option>
<option>Long Curly</option>
<option>Pixie Cut</option>
<option>Bob Cut</option>
<option>Blunt Bob</option>
<option>Curly Bob</option>
<option>Half-Up Bun</option>
<option>Braided Ponytail</option>
<option>Dutch Braids</option>
<option>High Ponytail</option>
<option>Low Ponytail</option>
<option>Top Knot</option>
<option>Loose Waves</option>
<option>Quiff</option>
<option>Pompadour</option>
<option>Short Spiky</option>
<option>Medium Tousled</option>
<option>Half-Shaved Style</option>
<option>Soft Curls</option>
<option>Ringlets</option>
<option>Locs (Short)</option>
<option>Locs (Long)</option>
<option>Box Braids</option>
<option>Fishtail Braid</option>
<option>Hime Cut</option>
<option>Feathered Long Hair</option>
<option>Shoulder-Length Waves</option>
<option>Wavy Bob</option>
<option>Unselected</option>
</select>
</div>
<div>
<label>Hair Color:</label>
<select data-var="$hairColor">
<option>Brown</option>
<option>Black</option>
<option>Blonde</option>
<option>Red</option>
<option>White</option>
<option>Ginger</option>
<option>Auburn</option>
<option>Chestnut</option>
<option>Dirty Blonde</option>
<option>Strawberry Blonde</option>
<option>Jet Black</option>
<option>Silver</option>
<option>Ash Brown</option>
<option>Ash Blonde</option>
<option>Platinum Blonde</option>
<option>Golden Blonde</option>
<option>Dark Brown</option>
<option>Light Brown</option>
<option>Midnight Blue</option>
<option>Dark Green</option>
<option>Purple</option>
<option>Pink</option>
<option>Unselected</option>
</select>
</div>
<div>
<label>Eye Color:</label>
<select data-var="$eyeColor">
<option>Blue</option>
<option>Green</option>
<option>Brown</option>
<option>Gray</option>
<option>Unselected</option>
</select>
</div>
<div>
<label>Chest:</label>
<select data-var="$breast">
<option>Flat</option>
<option>Petite</option>
<option>Average</option>
<option>Full</option>
<option>Huge</option>
<option>Unselected</option>
</select>
</div>
<div>
<label>Genitals:</label>
<select data-var="$genitals">
<option>Penis</option>
<option>Vagina</option>
<option>Unselected</option>
</select>
</div>
<div id="penisBlock" style="display:none; text-align:center; width:100%; margin-top:6px;">
<label><strong>Penis Size:</strong></label>
<input id="penisSlider" type="range" min="1" max="12" step="1"
data-var="$genitalSize" value="<<print $genitalSize>>">
<div id="genitalSizeText"></div>
</div>
<div class="button-row">
[[Back->Continue]]
<button onclick="randomizeAppearance()">Randomize</button>
<button onclick="resetAppearance()">Reset</button>
[[Review Character->Creator_Review]]
</div>
</div>
<<script>>
/* ---------------------------
APPEARANCE — PAGE-ONLY LOGIC
--------------------------- */
function updatePenisText() {
const val = parseInt($("#penisSlider").val(), 10);
$("#genitalSizeText").text(val + " inches");
}
function updateGenitalsVisibility() {
const g = State.variables.genitals;
if (g === "Penis") {
$("#penisBlock").show();
updatePenisText();
} else {
$("#penisBlock").hide();
}
}
function updatePreview() {
$("#preview").empty().wiki('<<set $previewMode = "appearance">><<include "Preview">>');
}
function validateAll() {
const v = State.variables;
const required = [
v.name, v.gender, v.hairColor, v.eyeColor, v.height, v.skinTone,
v.bodyType, v.bloodstatus, v.breast, v.genitals, v.hairStyle
];
const invalid = required.some(x => !x || x === "Unselected");
$("#confirmLink").toggleClass("disabledChoice", invalid);
}
function syncAppearanceUI() {
const v = State.variables;
$("[data-var='$skinTone']").val(v.skinTone || "Unselected");
$("[data-var='$hairStyle']").val(v.hairStyle || "Unselected");
$("[data-var='$hairColor']").val(v.hairColor || "Unselected");
$("[data-var='$eyeColor']").val(v.eyeColor || "Unselected");
$("[data-var='$breast']").val(v.breast || "Unselected");
$("[data-var='$genitals']").val(v.genitals || "Unselected");
$("#penisSlider").val(typeof v.genitalSize === "number" ? v.genitalSize : 4);
updateGenitalsVisibility();
updatePreview();
validateAll();
}
/* Dropdowns/sliders on this page */
$(document).on("change input", "[data-var]", function() {
const dv = $(this).data("var");
const val = $(this).val();
if (dv === "$genitalSize") {
State.variables.genitalSize = parseInt(val, 10);
updatePenisText();
} else {
State.variables[dv.substring(1)] = val;
}
updateGenitalsVisibility();
updatePreview();
validateAll();
});
/* ✅ Randomize ONLY the fields on this page */
window.randomizeAppearance = function() {
const hairColor = [
"Brown","Black","Blonde","Red","White","Ginger","Auburn","Chestnut","Dirty Blonde","Strawberry Blonde",
"Jet Black","Silver","Ash Brown","Ash Blonde","Platinum Blonde","Golden Blonde","Dark Brown","Light Brown",
"Midnight Blue","Dark Green","Purple","Pink"
];
const hairStyle = [
"Short Crop","Buzz Cut","Faded Undercut","Messy Fringe","Side-Parted Short",
"Wavy Medium","Shoulder-Length Straight","Curly Shoulder-Length","Layered Shag","Wolf Cut",
"Long Straight","Long Wavy","Long Curly","Pixie Cut","Bob Cut","Blunt Bob","Curly Bob",
"Half-Up Bun","Braided Ponytail","Dutch Braids","High Ponytail","Low Ponytail","Top Knot",
"Loose Waves","Quiff","Pompadour","Short Spiky","Medium Tousled","Half-Shaved Style",
"Soft Curls","Ringlets","Locs (Short)","Locs (Long)","Box Braids","Fishtail Braid",
"Hime Cut","Feathered Long Hair","Shoulder-Length Waves","Wavy Bob"
];
const eyes = ["Blue","Green","Brown","Gray"];
const chest = ["Flat","Petite","Average","Full","Huge"];
const genital = ["Penis","Vagina"];
const skin = ["Pale","Fair","Light","Medium","Tan","Olive","Brown","Dark"];
const v = State.variables;
v.skinTone = skin.random();
v.hairStyle = hairStyle.random();
v.hairColor = hairColor.random();
v.eyeColor = eyes.random();
v.breast = chest.random();
v.genitals = genital.random();
v.genitalSize = Math.floor(Math.random() * 12) + 1;
syncAppearanceUI();
};
/* ✅ Reset ONLY the fields on this page */
window.resetAppearance = function() {
const v = State.variables;
v.skinTone = "Unselected";
v.hairStyle = "Unselected";
v.hairColor = "Unselected";
v.eyeColor = "Unselected";
v.breast = "Unselected";
v.genitals = "Unselected";
v.genitalSize = 4;
syncAppearanceUI();
};
/* Init */
$(document).ready(function() {
syncAppearanceUI();
});
<</script>><<set $returnPassage = passage()>>
<div class="creator">
<h2>Review Your Character</h2>
<div class="previewBox">
<<include "Preview">>
</div>
<div class="button-row">
[[Basic Info->Continue]]
[[Appearance->Creator_Appearance]]
[[Confirm]]
</div>
</div>
<div class="inventory-wrapper settings-wrapper">
<h2>Settings</h2>
<div id="settings-panel">
<<include "SettingsPanel">>
</div>
<br>
<<link "Return">><<goto $returnPassage>><</link>>
</div><div class="settings-grid">
<div class="settings-row">
<div class="settings-card">
<h4>Text Size</h4>
<p>Adjust general reading size.</p>
Current: <<print $settings.textSize>>
<div class="segmented">
<span class="segmented-item <<= $settings.textSize is 'small' ? 'active-setting' : '' >>">
<<button "Small">>
<<set $settings.textSize = "small">>
<<run window.applyHexmoorSettings()>>
<<run window.refreshSettingsPanel()>>
<</button>>
</span>
<span class="segmented-item <<= $settings.textSize is 'default' ? 'active-setting' : '' >>">
<<button "Default">>
<<set $settings.textSize = "default">>
<<run window.applyHexmoorSettings()>>
<<run window.refreshSettingsPanel()>>
<</button>>
</span>
<span class="segmented-item <<= $settings.textSize is 'big' ? 'active-setting' : '' >>">
<<button "Big">>
<<set $settings.textSize = "big">>
<<run window.applyHexmoorSettings()>>
<<run window.refreshSettingsPanel()>>
<</button>>
</span>
</div>
</div>
<div class="settings-card">
<h4>Animated Colours</h4>
<p>Enable or disable colour cycling.</p>
<div class="settings-control">
<<if $settings.animatedColors>>
<div class="toggle on"
onclick="
SugarCube.State.variables.settings.animatedColors = false;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">ON</div>
<<else>>
<div class="toggle off"
onclick="
SugarCube.State.variables.settings.animatedColors = true;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">OFF</div>
<</if>>
</div>
</div>
<div class="settings-card">
<h4>Magic Cursor</h4>
<p>Toggle the glowing custom cursor.</p>
<div class="settings-control">
<<if $settings.magicCursor>>
<div class="toggle on"
onclick="
SugarCube.State.variables.settings.magicCursor = false;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">ON</div>
<<else>>
<div class="toggle off"
onclick="
SugarCube.State.variables.settings.magicCursor = true;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">OFF</div>
<</if>>
</div>
</div>
</div>
<div class="settings-row">
<div class="settings-card">
<h4>Reduced Motion</h4>
<p>Reduce animation and movement effects.</p>
<div class="settings-control">
<<if $settings.reducedMotion>>
<div class="toggle on"
onclick="
SugarCube.State.variables.settings.reducedMotion = false;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">ON</div>
<<else>>
<div class="toggle off"
onclick="
SugarCube.State.variables.settings.reducedMotion = true;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">OFF</div>
<</if>>
</div>
</div>
<div class="settings-card">
<h4>Passage Width</h4>
<p>Choose how wide the text area should be.</p>
Current: <<print $settings.passageWidth>>
<div class="segmented">
<span class="segmented-item <<= $settings.passageWidth is 'compact' ? 'active-setting' : '' >>">
<<button "Compact">>
<<set $settings.passageWidth = "compact">>
<<run window.applyHexmoorSettings()>>
<<run window.refreshSettingsPanel()>>
<</button>>
</span>
<span class="segmented-item <<= $settings.passageWidth is 'default' ? 'active-setting' : '' >>">
<<button "Default">>
<<set $settings.passageWidth = "default">>
<<run window.applyHexmoorSettings()>>
<<run window.refreshSettingsPanel()>>
<</button>>
</span>
<span class="segmented-item <<= $settings.passageWidth is 'wide' ? 'active-setting' : '' >>">
<<button "Wide">>
<<set $settings.passageWidth = "wide">>
<<run window.applyHexmoorSettings()>>
<<run window.refreshSettingsPanel()>>
<</button>>
</span>
</div>
</div>
<div class="settings-card">
<h4>Compact Mode</h4>
<p>Tighten UI spacing for a denser layout.</p>
<div class="settings-control">
<<if $settings.compactMode>>
<div class="toggle on"
onclick="
SugarCube.State.variables.settings.compactMode = false;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">ON</div>
<<else>>
<div class="toggle off"
onclick="
SugarCube.State.variables.settings.compactMode = true;
window.applyHexmoorSettings();
$('#settings-panel').empty().wiki('<<include "SettingsPanel">>');
">
<div class="toggle-knob"></div>
</div>
<div class="toggle-label">OFF</div>
<</if>>
</div>
</div>
</div>
</div><<set $returnPassage = passage()>>
Thatch’s voice is almost reverent.
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> These will adapt perfectly once your house is chosen. Until then, they’ll anticipate you. Don’t let them get bored. </div></div>
Behind them, more items glide forward:
Three sets of plain dark work-robes
A formal pointed hat in deep charcoal
Reinforced spell-resistant gloves
A winter cloak with silver fastenings
Hawthorne watches quietly, clearly evaluating how you handle the sight.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is the complete Hexmoor uniform. It should serve you well. </div></div>
Thatch taps the floating bundle with a finger.
<div class="dialogueBox"> <div class="speakerName">Tailor Thatch</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Fifteen gold for the full set. Reactive surcharge waived — first-year privilege. </div></div>
[[Pay and leave|RobesExitHandler]]<<set $returnPassage = passage()>>
The light around the tip sharpens—only for a moment—before fading again, like a breath drawn but not released.
Solivan circles you once, jaw clenched in thought.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I don’t like mysteries in my own shop. And that—whatever that is—wasn’t in the materials you touched. </div></div>
He looks up at Hawthorne.
<div class="dialogueBox"> <div class="speakerName">Solivan</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You understand what this implies. </div></div>
Hawthorne meets his gaze, and for a heartbeat, neither speaks.
Then:
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Not here. Not yet. </div></div>
Solivan snorts, but backs off.
Your wand settles in your grip, the hum quieting into something like contentment.
Hawthorne places a hand gently on your shoulder—guiding, steadying.
She nods toward the shop door.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come on. There’s still more of Hexmarket to see. </div></div>
[[Pay Solivan and leave the Atelier|WandExitHandler]]<<set $returnPassage = passage()>>
Morning arrives with the uncomfortable feeling that something enormous is about to happen.
Your bags are packed.
Robes.
Books.
Wand.
Your companion seems to understand too.
<<if $petType == "Aether Owl">>
The Aether Owl watches from nearby, pale feathers shifting in a breeze that isn't there.
<<elseif $petType == "Ember Hound Pup">>
The Ember Hound Pup paces excitedly around your bags, tiny sparks flickering from its tail.
<<elseif $petType == "Mossback Tortoise">>
The Mossback Tortoise waits patiently beside your luggage.
<<elseif $petType == "Starlit Cat">>
The Starlit Cat lounges beside your bags, faint constellations drifting across its coat.
<</if>>
Today, you're leaving for Hexmoor.
A soft distortion passes through the room.
Light twists.
Air folds inward—
and Professor Clarissa Hawthorne appears as the last traces of a glasslike spiral dissolve around her.
Her gaze passes over you, your luggage, and your companion.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good. You're ready. </div></div>
She gestures toward your bags.
They lift from the floor and vanish in a soft flash.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your belongings will be waiting for you.<br> Keep your companion close. </div></div>
Hawthorne raises one hand.
Light folds inward.
Air twists into a helix.
Clear, glasslike rings form around you as wind stirs through the room.
Your companion presses closer.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Same as before.<br> When the rings close, hold your breath. </div></div>
The spiral tightens.
You hold your breath.
Light bends—
and the world snaps inward into a single, brilliant turning point.
[[Continue|Arrival at Hexmoor]]<<set $returnPassage = passage()>>
The world unfolds.
Cold air rushes into your lungs.
Your feet meet damp stone as the last glasslike rings dissolve around you, leaving only a faint shimmer in the air.
For a moment, everything is quiet.
Then you look up.
Hexmoor Academy stands beyond the gates.
Not a castle.
The Academy spreads across the hillside in great tiers of dark stone and weathered copper, built into the landscape rather than towering above it. Long halls follow the natural curve of the hill, connected by enclosed bridges and open terraces cut into the rock.
Tall, narrow windows glow warmly beneath sweeping roofs.
A circular glass observatory crowns one of the upper levels, its enormous brass rings slowly turning around the dome.
Farther up, a broad tower rises from the centre of the complex — not pointed or ornamental, but solid and ancient, carved with enormous runes that catch the grey daylight whenever the clouds move.
Streams of water run between parts of the grounds in channels etched directly into the stone, occasionally flowing uphill before disappearing beneath archways.
Beyond everything, the northern hills stretch into mist.
Your companion shifts beside you.
<<if $petType == "Aether Owl">>
<<print $petName>> lifts its head, pale feathers stirring eagerly in the cold air.
<<elseif $petType == "Ember Hound Pup">>
<<print $petName>> gives a quiet, excited chirp, its tail glowing against the grey surroundings.
<<elseif $petType == "Mossback Tortoise">>
<<print $petName>> stretches its neck toward the Academy, taking it all in with patient curiosity.
<<elseif $petType == "Starlit Cat">>
<<print $petName>> goes completely still, luminous eyes following the slow movement of the observatory above.
<</if>>
A few people move through the grounds.
A groundskeeper directs floating crates toward one of the lower buildings.
Two professors cross a distant terrace, deep in conversation.
Someone high above tests a line of lanterns, each one flickering to life in sequence along a bridge.
Preparations for tomorrow.
But for now, Hexmoor belongs mostly to the silence.
Hawthorne stands beside you, allowing the moment to settle.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome to Hexmoor Academy. </div></div>
The enormous iron gates ahead are worked with twisting geometric patterns rather than bars, their centre marked by the four house emblems.
As Hawthorne approaches, the patterns begin to move.
Metal slides over metal.
The four emblems separate.
And the gates silently open.
Hawthorne glances back.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come along.<br> You have the rare privilege of seeing the place before it becomes considerably louder. </div></div>
You follow her through.
The gates close behind you.
And for the first time, you step onto the grounds of Hexmoor Academy.
[[Continue|Inside Hexmoor]]<<set $returnPassage = passage()>>
The difference is immediate.
Outside, Hexmoor felt vast.
Inside, it feels alive.
Hawthorne leads you through a broad entrance hall of dark stone, warm timber, brass, and glass. No endless rows of suits of armour or candlelit corridors — the space feels built for study.
Long runic channels are set into the floor, glowing faintly beneath your feet.
High above, suspended glass orbs drift slowly through the rafters, adjusting their light as clouds pass beyond the windows.
Your footsteps echo through the otherwise quiet hall.
A few members of staff are already at work.
One professor stands halfway up a staircase, directing stacks of parchment into different classrooms with precise movements of her wand.
Another passes carrying a crate labelled:
ALCHEMICAL MATERIALS — FIRST YEAR — DO NOT SHAKE
Something inside knocks loudly against the wood.
Hawthorne doesn't even look at it.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tomorrow, this hall will be considerably less peaceful. </div></div>
You continue deeper into the Academy.
She doesn't stop for a formal tour, but points things out as you pass.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Dining Hall through there.<br> Infirmary is on the lower level.<br> The central stairwell connects most of the teaching wings. </div></div>
You glance upward.
The stairwell ahead doesn't move—
but the doors around it do.
One quietly slides several feet along the wall before settling into a new position.
Hawthorne notices you staring.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You'll get used to that. </div></div>
You aren't entirely convinced.
Farther on, wide windows overlook the grounds below.
You catch brief glimpses of enclosed courtyards, glass-roofed workshops, gardens cut into the hillside, and distant students' residences built across several terraces.
There is far more here than you could possibly take in today.
Hawthorne turns into a quieter corridor.
The walls change from dark stone to deep wood panelling, broken by tall windows and framed portraits of former faculty.
At the far end stands a single heavy door.
A brass plaque beside it reads:
HEADMASTER ALDRIC THORNWELL
Hawthorne slows.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The rest can wait until tomorrow.<br> First, the Headmaster would like to meet you. </div></div>
She steps toward the door.
[[Continue|Headmaster's Office]]<<set $returnPassage = passage()>>
Hawthorne knocks twice.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come in. </div></div>
The office beyond is warm and orderly — dark wood, crowded bookshelves, tall windows overlooking the mist-covered hills.
An older man rises from behind a broad desk.
Silver-grey hair.
Neatly trimmed beard.
Formal robes edged with subtle brass embroidery.
His attention settles on you immediately.
Measured, but not unfriendly.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> <<print $name>>.<br> Welcome to Hexmoor. Aldric Thornwell. </div></div>
<<run addRelationship("Headmaster Aldric Thornwell", 60, "human")>>
He offers his hand before glancing briefly toward Hawthorne.
Something passes between them.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Professor Hawthorne has told me about your introduction to our world.<br> Yours has been... somewhat unusual. </div></div>
For a moment, you get the impression he could say considerably more.
He doesn't.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tomorrow you'll join the other first-years for induction and house placement.<br> Before then, I want you taught one defensive spell. </div></div>
Hawthorne seems unsurprised.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nothing offensive.<br> Simply enough to protect yourself should the need arise. </div></div>
That familiar phrase hangs unspoken between them.
<em>Your circumstances.</em>
Thornwell gives you a small, reassuring smile.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> We'll speak again soon.<br> For now, welcome to Hexmoor. </div></div>
Hawthorne gestures toward the door.
[[Follow Hawthorne|Combat Test]]
<<set $thornwellGenitals to "Unknown">>
<<set $thornwellRelation = "Headmaster">>
<<set $maxHealth = 100>>
<<set $health = 100>>
<<set $maxFocus = 100>>
<<set $focus = 100>>
<<set $maxGuard = 60>>
<<set $guard = 0>>
<<set $knownSpells = []>>
<<set $combat = null>><<set $returnPassage = passage()>>
Hawthorne leads you down a short corridor and into a circular practice chamber.
The room is bare apart from several brass lines set into the stone floor and old scorch marks along the far wall.
She closes the door behind you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Ward is one of the simplest defensive spells you'll learn.<br> Simple does not mean unimportant. </div></div>
She raises one hand.
A thin layer of pale light gathers across her palm before spreading outward into a faint, translucent barrier.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Don't try to stop the attack itself.<br> Focus on placing something between yourself and it. </div></div>
The barrier fades.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hold the shape in your mind, push your Focus outward, and let the magic settle in front of you. </div></div>
<<run learnSpell("ward")>>
Hawthorne walks several paces away and turns to face you.
A small point of harmless several paces away and turns to face you.
A small point of harmless blue-white light forms above her fingers.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'll send three training bolts at you.<br> Block all three and we're finished. </div></div>
<<run startCombat({
id: "wardTraining",
allies: [],
enemies: [
"hawthorneTraining"
],
objective: {
type: "blockAttacks",
count: 3
},
victory: "Combat Test Victory",
defeat: "Combat Test Defeat"
})>>
[[Combat]]<div style="text-align:center;"> <h2>Headmaster Aldric Thornwell</h2> </div>
Age: 60
House: Unrevealed
Pronouns: He/Him/His
Relation to you: <<print $thornwellRelation>>
Height & Build: 6'2", tall and broad-shouldered with a dignified, upright posture
Face: Distinguished, angular features; subtle lines around sharp, observant eyes that suggest decades of experience
Hair: Silver-grey, thick and swept neatly back
Skin: Fair complexion, lightly weathered with age
Expression: Formal and measured, rarely giving away more than he intends, though genuine warmth occasionally breaks through
Clothing: Dark formal mage robes edged with understated brass embroidery; always immaculate without appearing overly ceremonial
Chest & Build: Broad chest with a solid, mature build beneath his robes
Hips & Figure: Straight, balanced frame with a sturdy waist
Arse: Firm and proportional to his build, largely concealed beneath his formal robes
Genitals: <<print $thornwellGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>>
<<if !$combat || !$combat.active>>
No combat is currently active.
<<else>>
<<set _current = $combat.actors[$combat.turnIndex]>>
<div class="combat-screen">
<!-- HEADER -->
<div class="combat-header">
<h2>Combat</h2>
<div class="combat-round">
Round <<print $combat.round>> • <<print _current.name>>'s Turn
</div>
<<if $combat.objective && $combat.objective.type === "blockAttacks">>
<div class="combat-objective">
Block Training Bolts:
<<print $combat.successfulBlocks>> /
<<print $combat.objective.count>>
</div>
<</if>>
</div>
<!-- THREE COLUMN BATTLE AREA -->
<div class="combat-layout">
<!-- ===============================
YOUR SIDE
================================ -->
<div class="combat-column">
<div class="combat-team-title">
Your Side
</div>
<div class="combat-team">
<<for _i = 0; _i < $combat.actors.length; _i++>>
<<set _actor = $combat.actors[_i]>>
<<if _actor.team === "player" && _actor.alive>>
<<set _healthPercent = Math.max(0, Math.min(100, (_actor.health / _actor.maxHealth) * 100))>>
<<set _focusPercent = _actor.maxFocus > 0 ? Math.max(0, Math.min(100, (_actor.focus / _actor.maxFocus) * 100)) : 0>>
<div class="combat-character <<if _actor.runtimeId === _current.runtimeId>>active-turn<</if>>">
<div class="combat-character-name">
<<print _actor.name>>
</div>
<div class="combat-stat">
<span class="combat-stat-label">
HP
</span>
<div class="combat-bar">
<div
class="combat-bar-fill combat-health-fill"
@style="'width:' + _healthPercent + '%;'">
</div>
</div>
<span class="combat-stat-value">
<<print _actor.health>> / <<print _actor.maxHealth>>
</span>
</div>
<<if _actor.maxFocus > 0>>
<div class="combat-stat">
<span class="combat-stat-label">
Focus
</span>
<div class="combat-bar">
<div
class="combat-bar-fill combat-focus-fill"
@style="'width:' + _focusPercent + '%;'">
</div>
</div>
<span class="combat-stat-value">
<<print _actor.focus>> / <<print _actor.maxFocus>>
</span>
</div>
<</if>>
<<if _actor.guard > 0>>
<div class="combat-guard">
🛡 <<print _actor.guard>> Guard
</div>
<</if>>
</div>
<</if>>
<</for>>
</div>
</div>
<!-- ===============================
ACTIONS
================================ -->
<div class="combat-column">
<div class="combat-actions">
<<if _current.control === "player">>
<!-- TARGET SELECT -->
<<if $combat.pendingSpell>>
<<set _spell = setup.spells[$combat.pendingSpell]>>
<h3>
Choose Target — <<print _spell.name>>
</h3>
<div class="combat-targets">
<<for _i = 0; _i < $combat.actors.length; _i++>>
<<set _target = $combat.actors[_i]>>
<<if _target.team === "enemy" && _target.alive>>
<<capture _target>>
<<button `_target.name + " — " + _target.health + "/" + _target.maxHealth + " HP"`>>
<<run chooseCombatTarget(_target.runtimeId)>>
<</button>>
<</capture>>
<</if>>
<</for>>
</div>
<!-- SPELL SELECT -->
<<else>>
<h3>Choose Action</h3>
<div class="combat-spell-grid">
<<for _i = 0; _i < _current.spells.length; _i++>>
<<set _spellId = _current.spells[_i]>>
<<set _spell = setup.spells[_spellId]>>
<<if _current.focus >= _spell.focusCost>>
<div class="combat-spell">
<<capture _spellId>>
<<button _spell.name>>
<<run chooseCombatSpell(_spellId)>>
<</button>>
<</capture>>
<div class="combat-spell-description">
<<print _spell.description>>
</div>
<div class="combat-spell-cost">
<<print _spell.focusCost>> Focus
</div>
</div>
<<else>>
<div class="combat-spell combat-spell-disabled">
<strong>
<<print _spell.name>>
</strong>
<div class="combat-spell-description">
<<print _spell.description>>
</div>
<div class="combat-spell-cost">
<<print _spell.focusCost>> Focus
</div>
</div>
<</if>>
<</for>>
<!-- CONCENTRATE -->
<div class="combat-spell">
<<button "Concentrate">>
<<run combatConcentrate()>>
<</button>>
<div class="combat-spell-description">
Recover magical Focus.
</div>
<div class="combat-spell-cost">
+25 Focus
</div>
</div>
</div>
<</if>>
<!-- AI TURN -->
<<else>>
<h3>
<<print _current.name>> is acting...
</h3>
<<script>>
setTimeout(function () {
if (
State.variables.combat &&
State.variables.combat.active
) {
runCombatAI();
}
}, 600);
<</script>>
<</if>>
</div>
</div>
<!-- ===============================
ENEMIES
================================ -->
<div class="combat-column">
<div class="combat-team-title">
Opponents
</div>
<div class="combat-team">
<<for _i = 0; _i < $combat.actors.length; _i++>>
<<set _actor = $combat.actors[_i]>>
<<if _actor.team === "enemy" && _actor.alive>>
<<set _healthPercent = Math.max(0, Math.min(100, (_actor.health / _actor.maxHealth) * 100))>>
<<set _focusPercent = _actor.maxFocus > 0 ? Math.max(0, Math.min(100, (_actor.focus / _actor.maxFocus) * 100)) : 0>>
<div class="combat-character <<if _actor.runtimeId === _current.runtimeId>>active-turn<</if>>">
<div class="combat-character-name">
<<print _actor.name>>
</div>
<div class="combat-stat">
<span class="combat-stat-label">
HP
</span>
<div class="combat-bar">
<div
class="combat-bar-fill combat-health-fill"
@style="'width:' + _healthPercent + '%;'">
</div>
</div>
<span class="combat-stat-value">
<<print _actor.health>> / <<print _actor.maxHealth>>
</span>
</div>
<<if _actor.maxFocus > 0>>
<div class="combat-stat">
<span class="combat-stat-label">
Focus
</span>
<div class="combat-bar">
<div
class="combat-bar-fill combat-focus-fill"
@style="'width:' + _focusPercent + '%;'">
</div>
</div>
<span class="combat-stat-value">
<<print _actor.focus>> / <<print _actor.maxFocus>>
</span>
</div>
<</if>>
<<if _actor.guard > 0>>
<div class="combat-guard">
🛡 <<print _actor.guard>> Guard
</div>
<</if>>
</div>
<</if>>
<</for>>
</div>
</div>
</div>
<!-- ===============================
COMBAT LOG
================================ -->
<<if $combat.log.length > 0>>
<div class="combat-log">
<div class="combat-log-title">
Recent Actions
</div>
<<set _start = Math.max(0, $combat.log.length - 2)>>
<<for _i = _start; _i < $combat.log.length; _i++>>
<div>
<<print $combat.log[_i]>>
</div>
<</for>>
</div>
<</if>>
</div>
<</if>><<set $returnPassage = passage()>>
The third Training Bolt strikes the Ward and bursts harmlessly across its surface.
Hawthorne lowers her hand immediately.
The remaining light around her fingers disappears.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good.<br> That's enough. </div></div>
She steps closer, briefly examining the last traces of the barrier before they fade.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It won't stop everything, and stronger magic will break through it eventually.<br> But used properly, Ward will keep you alive long enough to do something about it. </div></div>
Her expression softens slightly.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> For your first spell, I'll call that satisfactory. </div></div>
<<set $health = $maxHealth>>
<<set $focus = $maxFocus>>
<<set $guard = 0>>
[[Continue|After Combat Test]]<<set $returnPassage = passage()>>
Hawthorne lowers her hand before another Training Bolt can form.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Stop.<br> You're letting the Ward collapse before the impact reaches it. </div></div>
She gestures for you to reset your stance.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Again.<br> Hold the barrier. Don't chase the bolt. </div></div>
<<set $health = $maxHealth>>
<<set $focus = $maxFocus>>
<<set $guard = 0>>
[[Try Again|Combat Test]]<<set $returnPassage = passage()>>
The practice chamber door closes behind you.
Hawthorne leads you back through Hexmoor's quieter corridors, away from the administrative wing.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's enough magic for one evening.<br> You'll have plenty more thrown at you tomorrow. </div></div>
Most of the academy is still quiet.
Staff move between rooms preparing for the arrival of the remaining first-years, while distant voices occasionally carry through the halls.
Hawthorne slows slightly beside you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> We have a little time before I leave you to settle in.<br> If there's something you want to ask, now would be a reasonable opportunity. </div></div>
[[Why was I brought here early?|Early Arrival]]--------[[Why did Thornwell want me to learn Ward?|Ward Question]]--------[[What is unusual about me?|Unusual Magic]]
[[Move On|Temp room]]<<set $returnPassage = passage()>>
Hawthorne considers the question for a moment.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The simple answer is that we thought giving you a day to adjust would be easier than dropping you into induction alongside everyone else. </div></div>
Her tone makes it clear there is a less simple answer.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your introduction to magic was unusually abrupt.<br> Thornwell wanted you here before the academy became crowded. </div></div>
She glances ahead along the corridor.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There are things we're still trying to understand.<br> Until we do, I'd rather you had some time to find your footing without half the school watching. </div></div>
The answer is evasive, but not dismissive.
If anything, she seems more concerned with keeping something away from you than keeping you away from the truth.
[[Why did Thornwell want me to learn Ward?|Ward Question]]--------[[What is unusual about me?|Unusual Magic]]
[[Move On|Temp room]]<<set $returnPassage = passage()>>
Hawthorne gives a small exhale through her nose.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Because Ward is useful, simple, and very difficult to misuse. </div></div>
She glances toward you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you only knew one spell tonight, Thornwell wanted it to be something that could keep you standing. </div></div>
There is a slight pause.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Magic can go wrong very quickly when someone is frightened, inexperienced, or both.<br> A defensive spell gives you options without encouraging you to throw something dangerous back. </div></div>
Her expression softens.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> And, for the moment, I'd prefer you had that protection. </div></div>
She doesn't elaborate.
[[Why was I brought here early?|Early Arrival]]--------[[What is unusual about me?|Unusual Magic]]
[[Move On|Temp room]]<<set $returnPassage = passage()>>
Hawthorne is quiet for several steps.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your magic reacts to things differently than I'd expect. </div></div>
Her gaze shifts briefly toward you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The Veil, especially.<br> Most people need guidance before they can properly perceive what sits behind it. You responded to it almost immediately. </div></div>
She folds her arms loosely.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That doesn't mean you're dangerous, or destined for anything dramatic.<br> It means there are questions we don't have answers to yet. </div></div>
Her tone softens.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> And until we do, I'd rather you weren't burdened with every theory someone can invent about you. </div></div>
That, more than anything else, sounds like the real reason for her caution.
[[Why was I brought here early?|Early Arrival]]--------[[Why did Thornwell want me to learn Ward?|Ward Question]]
[[Move On|Temp room]]<<set $returnPassage = passage()>>
Hawthorne leads you through another stretch of Hexmoor's quieter corridors.
The halls grow steadily less busy as you move away from the administrative wing.
Eventually, she stops outside a dark wooden door marked with a small brass number plate.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This will be yours for tonight.<br> Once you're formally inducted tomorrow, you'll be moved into your house accommodation. </div></div>
She opens the door, but remains in the corridor.
Inside is a simple bedroom with a single bed, desk, wardrobe and a narrow window overlooking the dark academy grounds.
Fresh bedding and folded towels have already been left for you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Breakfast begins at seven.<br> Someone will collect you before your induction, so don't worry about finding your way back alone. </div></div>
Hawthorne pauses before leaving.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Try to get some sleep.<br> Tomorrow should answer at least a few more questions. </div></div>
She gives you a small nod before walking away.
Her footsteps disappear down the corridor.
You close the door behind you.
For the first time since arriving at Hexmoor, you have some time entirely to yourself.
[[Look around the room|Explore Temp Room]]--------[[Get ready for bed|Prepare For Bed]]--------[[Have a wank|Solo Private Time]]<<set $returnPassage = passage()>>
<<if !$privateEncounter || !$privateEncounter.active>>
No interaction is currently active.
<<else>>
<<set _encounter = $privateEncounter>>
<<set _current = getCurrentPrivateParticipant()>>
<div class="private-screen">
<div class="private-header">
<h2>Sex</h2>
</div>
<!-- PARTICIPANTS -->
<div class="private-participants">
<<for _i = 0; _i < _encounter.participants.length; _i++>>
<<set _person = _encounter.participants[_i]>>
<<set _staminaPercent =
Math.max(
0,
Math.min(
100,
(_person.stamina / _person.maxStamina) * 100
)
)
>>
<<set _arousalPercent =
Math.max(
0,
Math.min(
100,
(_person.arousal / _person.maxArousal) * 100
)
)
>>
<div class="private-character">
<strong>
<<print _person.name>>
</strong>
<div class="private-stat">
<span>
Stamina
</span>
<div class="private-bar">
<div
class="private-bar-fill private-stamina-fill"
@style="'width:' + _staminaPercent + '%;'">
</div>
</div>
<span>
<<print _person.stamina>>
</span>
</div>
<div class="private-stat">
<span>
Arousal
</span>
<div class="private-bar">
<div
class="private-bar-fill private-arousal-fill"
@style="'width:' + _arousalPercent + '%;'">
</div>
</div>
<span>
<<print _person.arousal>>
</span>
</div>
</div>
<</for>>
</div>
<!-- ACTIONS -->
<<if _current.control === "player">>
<div class="private-actions">
<<for _i = 0; _i < _current.actions.length; _i++>>
<<set _actionId = _current.actions[_i]>>
<<set _action = setup.privateActions[_actionId]>>
<<if canUsePrivateAction(_current, _action, _target)>>
<<capture _actionId>>
<<if _action.target === "other">>
<<for _j = 0; _j < _encounter.participants.length; _j++>>
<<set _target = _encounter.participants[_j]>>
<<if _target.runtimeId !== _current.runtimeId>>
<<capture _target>>
<<button `_action.name + " — " + _target.name`>>
<<run performPrivateAction(
_actionId,
_target.runtimeId
)>>
<</button>>
<</capture>>
<</if>>
<</for>>
<<else>>
<<button _action.name>>
<<run performPrivateAction(
_actionId,
_current.runtimeId
)>>
<</button>>
<</if>>
<</capture>>
<</if>>
<</for>>
</div>
<</if>>
<div class="private-exit">
<<button "Stop">>
<<run exitPrivateEncounter()>>
<</button>>
</div>
<<if _encounter.log.length > 0>>
<div class="private-log">
<<set _start =
Math.max(
0,
_encounter.log.length - 3
)
>>
<<for _i = _start; _i < _encounter.log.length; _i++>>
<div>
<<print _encounter.log[_i]>>
</div>
<</for>>
</div>
<</if>>
</div>
<</if>><<run startPrivateEncounter({
id: "soloTest",
mode: "solo",
participants: [
{
runtimeId: "player",
name: $name,
control: "player",
genitals: $genitals,
stamina: 100,
maxStamina: 100,
arousal: 0,
maxArousal: 100,
actions: [
"soloOptionA",
"soloOptionB",
"rest"
]
}
],
goal: {
type: "playerArousal",
amount: 100
},
successPassage:
"Solo Test Complete",
exitPassage:
"Solo Test Cancelled"
})>>
<<goto "Private Interaction">><<set $testPartnerGenitals = "Vagina">>
<<run startPrivateEncounter({
id: "partnerTest",
mode: "partner",
participants: [
{
runtimeId: "player",
name: $name,
control: "player",
genitals: $genitals,
stamina: 100,
maxStamina: 100,
arousal: 0,
maxArousal: 100,
actions: [
"partnerPVOptionA",
"partnerVPOptionA",
"partnerPPOptionA",
"partnerVVOptionA",
"partnerUniversalOption",
"rest"
]
},
{
runtimeId: "testPartner",
name: "Test Partner",
control: "passive",
genitals: $testPartnerGenitals,
stamina: 100,
maxStamina: 100,
arousal: 0,
maxArousal: 100,
actions: []
}
],
goal: {
type: "everyoneArousal",
amount: 100
},
successPassage:
"Partner Test Complete",
exitPassage:
"Partner Test Cancelled"
})>>
Player Genitals:
<<print $privateEncounter.participants[0].genitals>>
Partner Genitals:
<<print $privateEncounter.participants[1].genitals>>
<<goto "Private Interaction">><<set $returnPassage = passage()>>
You take a few minutes to look around properly.
The room is plain, but not uncomfortable.
The bed is neatly made, the wardrobe stands empty, and a small writing desk sits beneath the narrow window.
Outside, Hexmoor stretches into the darkness.
Tall stone buildings rise around enclosed courtyards, their windows glowing faintly against the night.
Beyond them, the grounds disappear into trees and distant hills.
For somewhere supposedly full of students, the academy feels strangely still tonight.
A few books have been left on the desk, though none seem particularly important.
Mostly introductory material about academy rules, facilities, and what to expect during your first few days.
The washroom is small but modern, contrasting strangely with the old stone walls surrounding it.
Everything seems prepared for someone staying only briefly.
By tomorrow, this room will already be behind you.
For now, though, it's yours.
[[Get ready for bed|Prepare For Bed]]--------[[Take some time for yourself|Solo Private Time]]<<set $returnPassage = passage()>>
You keep the rest of the evening simple.
After washing up, you change into something comfortable and set your things aside for the morning.
<<print $petName>> gets settled nearby.
You fill a small bowl with fresh water and leave it within easy reach before making sure they're comfortable for the night.
With everything finally taken care of, you climb into bed.
The room falls quiet around you.
Tomorrow will be your first proper day at Hexmoor.
[[Go to sleep|First Night Sleep]]<<set $returnPassage = passage()>>
Alone in the temporary room, you finally have a little privacy.
Before anything else, you make sure <<print $petName>> is settled for the night.
You leave fresh water nearby and get them comfortable in their sleeping spot before turning your attention back to yourself.
With the room quiet and the door firmly closed, you begin getting undressed, leaving your clothes folded beside the bed.
For the first time all evening, there is nowhere you need to be and nobody waiting for you.
You have a little time to yourself before getting ready for sleep.
<<run startPrivateEncounter({
id: "tempRoomSolo",
mode: "solo",
participants: [
{
runtimeId: "player",
name: $name,
control: "player",
genitals: $genitals,
stamina: 100,
maxStamina: 100,
arousal: 0,
maxArousal: 100,
actions: [
"soloOptionA",
"soloOptionB",
"soloOptionC",
"soloOptionD",
"soloOptionE",
"rest"
]
}
],
goal: {
type: "playerArousal",
amount: 100
},
successPassage:
"Prepare For Bed After Private Time",
exitPassage:
"Prepare For Bed After Private Time"
})>>
[[Take some time for yourself|Private Interaction]]<<set $returnPassage = passage()>>
<<if $petType is "Starlit Cat">>
Something soft presses against your chest.
You open your eyes to find <<print $petName>> standing over you, staring down with the quiet insistence of a creature that has apparently decided you've slept long enough.
A small paw presses against you again.
<<elseif $petType is "Ember Hound Pup">>
A warm weight shifts beside the bed.
A moment later, <<print $petName>> nudges against you, followed by an impatient little huff.
When that fails to get an immediate response, another nudge follows.
<<elseif $petType is "Aether Owl">>
A faint rustle of wings pulls you slowly from sleep.
When you open your eyes, <<print $petName>> is perched nearby, watching you with unnervingly patient attention.
A soft hoot follows.
Apparently, that's your warning that morning has begun.
<<elseif $petType is "Mossback Tortoise">>
A quiet scraping sound reaches you from somewhere beside the bed.
You open your eyes to find <<print $petName>> making a slow but determined journey across the floor.
It's not exactly an urgent wake-up call.
Still, the steady movement is enough to drag you properly awake.
<</if>>
You lie there for another few seconds, still half-asleep.
The room feels unfamiliar.
Your eyes wander across the stone walls, the narrow window, and the furniture around you before everything from yesterday begins falling back into place.
Hexmoor.
Magic.
The Headmaster.
Hawthorne.
Right.
You're actually here.
Morning light spills through the window, and judging by the activity beginning somewhere beyond your door, the academy is already waking up around you.
<<print $petName>> remains nearby as you push yourself upright.
[[Get Ready|First Morning Routine]]<<set $returnPassage = passage()>>
Once you're finished, you take a moment to clean yourself up.
You wash, pull on something comfortable for the night, and leave your clothes with the rest of your things for tomorrow.
<<print $petName>> is already settled nearby, their water left within easy reach.
With nothing else demanding your attention, you finally climb into bed.
The room grows quiet around you.
Tomorrow will be your first proper day at Hexmoor.
[[Go to sleep|First Night Sleep]]<<set $returnPassage = passage()>>
You sit on the edge of the bed for a moment before finally forcing yourself properly awake.
The temporary room isn't exactly designed for a long stay, but the small washroom gives you enough to work with.
You splash cold water over your face first.
It helps.
A little.
You brush your teeth, wash properly as best you can with what has been provided, and dry yourself with one of the fresh towels left beside the sink.
A few basic toiletries have been provided as well, clearly intended for students arriving without everything they might normally have at home.
Which, in fairness, describes you fairly well.
Once you're clean, you return to the bedroom and start getting dressed.
Your Reactive House Robes are waiting among the things you bought yesterday.
The fabric is still almost completely black, but as you pull them on, faint colour begins moving through the seams.
Orange.
Purple.
Cyan.
Green.
Never settling for more than a moment.
Apparently, they still haven't made up their mind about you either.
You straighten the robes as best you can before checking yourself in the small mirror.
For someone who only discovered this world yesterday, you at least look slightly more like you belong in it now.
[[Finish Getting Ready|Morning Ready]]<<set $returnPassage = passage()>>
<<print $petName>> is still nearby as you finish getting ready.
You refresh their water, make sure they're comfortable, and gather anything you might need for the morning.
By now, Hexmoor beyond your door has fully come to life.
Footsteps pass through the corridor.
Doors open and close.
Voices drift between rooms, far more numerous than anything you heard last night.
Yesterday, much of the academy had felt almost empty.
This morning, it doesn't.
A firm knock sounds at the door.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Morning.<br> Ready for breakfast? </div></div>
When you open the door, Hawthorne is waiting outside.
Her eyes briefly move over your robes, catching the shifting colour running through the seams.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good choice.<br> You may as well let the robes enjoy their last few hours of indecision. </div></div>
Her attention shifts toward <<print $petName>>.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bring them along.<br> Pets are welcome in the dining hall. </div></div>
She steps aside.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Breakfast first.<br> Your induction starts afterwards. </div></div>
[[Follow Hawthorne|Morning Walk to Breakfast]]<<set $returnPassage = passage()>>
You fall into step beside Hawthorne as she leads you away from the temporary rooms.
The difference from last night is immediate.
Hexmoor is awake.
Students fill the corridors in small groups, some already dressed in robes carrying the colours of their houses while others wear the same shifting, undecided seams as yours.
A few hurry past carrying books and bags.
Others linger beside doorways talking over breakfast plans, schedules, or whatever happened during their journeys here.
Pets aren't unusual either.
You spot everything from ordinary-looking cats and owls to creatures you couldn't have named yesterday moving alongside their owners.
<<print $petName>> attracts a few passing glances, but nothing close to the attention you might have expected.
Hawthorne navigates the crowds without slowing.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Most of the first-years arrived yesterday evening or early this morning.<br> You'll meet plenty of them soon enough. </div></div>
The corridors gradually widen as you continue, joining larger streams of students all moving in roughly the same direction.
For the first time, you begin to get a sense of just how large Hexmoor actually is.
Staircases branch away above you.
Long galleries overlook lower halls.
Open doors reveal classrooms, courtyards, studies, and rooms whose purposes aren't immediately obvious.
And everywhere, magic seems woven into ordinary life.
Books drift behind students whose hands are already full.
A noticeboard rearranges its own announcements as people pass.
A pair of suits of armour quietly step aside to let a group through before returning to their posts.
Hawthorne glances toward you.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Breakfast is fairly informal.<br> Sit where you like, eat what you like, and try not to worry about remembering everyone's name immediately. </div></div>
A slightly larger group passes in front of you, forcing Hawthorne to slow for a moment.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> After breakfast, the first-years will be taken for induction.<br> That's when things become a little more organised. </div></div>
Ahead, the smell of cooked food begins to cut through the cooler air of the corridors.
The noise grows with it.
Hundreds of overlapping voices seem to be coming from somewhere beyond the next set of doors.
Hawthorne continues toward them.
[[Enter the Dining Hall|First Breakfast]]<<set $returnPassage = passage()>>
The dining hall doors stand open ahead of you.
Hawthorne stops just before them.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is where I leave you for now.<br> I have other things to deal with before induction. </div></div>
She glances into the crowded hall.
<div class="dialogueBox"> <div class="speakerName">Professor Clarissa Hawthorne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Eat something, talk to people, and don't disappear.<br> Someone will collect the first-years when it's time. </div></div>
With that, she turns and disappears back into the stream of students moving through the corridor.
You step inside.
The dining hall is enormous.
Long tables stretch beneath high arched windows, already crowded with students in every house colour.
Breakfast covers much of the available table space.
Eggs, toast, fruit, porridge, pastries, tea, coffee, and several things you don't immediately recognise.
Conversations overlap from every direction.
Laughter breaks out somewhere near the far wall.
A group of Emberfall students are arguing loudly over something while several Mossgren students nearby seem to have accumulated enough food for twice their number.
Pets are scattered throughout the hall as casually as everything else.
Cats curl beneath benches.
Owls perch along window ledges.
A small creature you can't identify is being fed pieces of toast by someone two tables over.
<<print $petName>> barely attracts a second glance.
For the first time since arriving at Hexmoor, nobody seems especially interested in the fact that you're new.
You're simply another student looking for breakfast.
[[Find somewhere to sit|Find Breakfast Seat]]<div style="text-align:center;">
<h2>Elliot Vale</h2>
</div>
Age: 21
House: Skyreach
Year: Third Year
Pronouns: He/Him/His
Relation to you: <<print $elliotRelation>>
Height & Build: 5'11"; lean and lightly athletic, with an easy, relaxed posture
Face: Refined features with a clear resemblance to Alexis; steady slate-blue eyes and a naturally approachable look
Hair: Dark brown, slightly tousled, kept shorter than Alexis's but with the same tendency to fall forward
Skin: Soft beige complexion with a healthy, slightly warm tone
Expression: Usually relaxed and faintly amused, as though very little at Hexmoor genuinely surprises him anymore
Clothing: Well-kept Skyreach student robes with cyan detailing; usually carries a few books or notes tucked under one arm
Chest & Build: Lean chest and shoulders, toned without being particularly bulky
Waist & Figure: Narrow waist with a balanced, athletic frame
Arse: Firm and proportional, understated beneath his robes
Genitals: <<print $elliotGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>>
You start scanning the tables.
Finding an empty seat isn't difficult.
Finding one that doesn't involve awkwardly inserting yourself into a conversation between complete strangers is another matter.
Then a familiar voice cuts through the noise.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hey!<br> Over here! </div></div>
You spot Alexis a short distance away, one hand raised above the table.
A young man sits beside her, probably a few years older.
As you get closer, the resemblance between them becomes obvious.
The same slate-blue eyes.
Similar features.
Although where Alexis carries herself with quiet curiosity, he looks completely at ease in the crowded hall.
He notices you approaching and begins gathering a mug and a couple of books from beside his plate.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Perfect timing.<br> This is Elliot, my older brother. He's just abandoning me for actual responsibilities. </div></div>
<div class="dialogueBox"> <div class="speakerName">Elliot Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'm going to study.<br> Apparently that's abandonment now. </div></div>
Alexis gives him an unimpressed look.
Elliot turns his attention to you instead.
<div class="dialogueBox"> <div class="speakerName">Elliot Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Elliot Vale.<br> Nice to meet you. </div></div>
He shifts the books under one arm.
<div class="dialogueBox"> <div class="speakerName">Elliot Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good luck with induction.<br> First morning's always a bit chaotic. </div></div>
He gives Alexis a light tap on the shoulder as he passes.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> See?<br> Abandonment. </div></div>
Elliot doesn't bother turning around.
Alexis gestures toward the seat he's just vacated.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sit down.<br> You look like you need breakfast. </div></div>
[[Sit with Alexis|Breakfast With Alexis]]
<<set $elliotRelation = "Acquaintance">>
<<set $elliotGenitals = "Unknown">><<set $returnPassage = passage()>>
<<set $elliotRelation = "Acquaintance">>
<<run addRelationship("Elliot Vale", 21, "human")>>
You take the empty seat beside Alexis.
Up close, the amount of food spread across the table is almost ridiculous.
Platters and bowls are passed back and forth between students, with fresh ones appearing almost as quickly as they're emptied.
There doesn't seem to be any particular order to where people sit either.
First-years mingle with older students, different house colours mix freely, and pets occupy whatever space their owners can make for them.
Alexis shifts a few things aside to leave some room for <<print $petName>>.
<<if $alexisAffinity == 2>>
She looks noticeably pleased that you actually came over.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I was starting to wonder whether you'd make me come drag you over myself. </div></div>
There's a playful edge to the comment that wasn't quite there when you first met.
<<elseif $alexisAffinity == 1>>
She gives you an easy smile as you settle in.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Glad you found me.<br> It's nice seeing at least one familiar face in here. </div></div>
<<else>>
She gives you a small, polite smile as you settle in.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Figured you might prefer sitting with someone you've already met. </div></div>
<</if>>
You begin sorting out breakfast while the noise of the hall carries on around you.
After yesterday's constant rushing from one unfamiliar place to another, sitting down with someone you actually recognise feels strangely normal.
Alexis glances at the shifting seams of your robes.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Those are still doing that, then. </div></div>
Orange briefly runs along one seam before fading into purple.
Alexis watches it change.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It'll be weird seeing them settle on one colour after induction.<br> Assuming the whole thing works the way Elliot keeps insisting it does. </div></div>
She reaches for her drink.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> He spent years telling me what Hexmoor would be like.<br> Somehow neglected to mention how confusing the first morning is. </div></div>
Around you, more students continue filing into the hall.
Plenty are wearing reactive robes like yours.
Other first-years look just as uncertain about where to sit, what to do, or who they're supposed to know.
It helps.
At least you're not the only one figuring this out as you go.
Alexis looks back toward you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Apparently they gather all of us after breakfast.<br> Then we get the proper welcome, induction, house selection... all of it. </div></div>
She pauses.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So this might be our last chance to pretend today isn't going to be completely overwhelming. </div></div>
[[Continue breakfast with Alexis|Breakfast Conversation]]<<set $returnPassage = passage()>>
You settle into breakfast beside Alexis while the noise of the dining hall carries on around you.
For a little while, neither of you says much.
There's enough going on around the room to fill the silence without it feeling awkward.
Eventually, Alexis glances toward you over her drink.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> We've still got a bit of time before induction.<br> If there's something you want to ask, go ahead. </div></div>
[[Elliot|Ask About Elliot]]---[[House Selection|Ask Alexis About Houses]]---[[Hexmoor|Ask Alexis About Hexmoor]]----[[The Houses|Ask Alexis About House Differences]]
[[Finish Breakfast|Breakfast End]]<<set $returnPassage = passage()>>
<<set $askedAlexisElliot = true>>
You glance in the direction Elliot disappeared.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Elliot?<br> He's been here for three years now. Skyreach, obviously. </div></div>
She takes another bite of breakfast.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> He's actually the reason I knew so much about Hexmoor before coming here.<br> Although he conveniently left out all the parts he thought would be funny for me to discover myself. </div></div>
Her expression makes it clear she hasn't entirely forgiven him for that.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> He's good, though.<br> Annoyingly good, actually. Especially when it comes to precise spellwork. </div></div>
She glances toward the doors.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Having him here makes all of this a little less intimidating.<br> Not that I'm ever telling him that. </div></div>
[[House Selection|Ask Alexis About Houses]]--------[[Hexmoor|Ask Alexis About Hexmoor]]--------[[The Houses|Ask Alexis About House Differences]]
[[Finish Breakfast|Breakfast End]]<<set $returnPassage = passage()>>
Alexis glances down at the shifting seams of your robes before looking back toward you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> House Selection?<br> Elliot's told me bits about it, but apparently we're supposed to experience most of it ourselves. </div></div>
She leans back slightly in her seat.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> From what I understand, it isn't just about what you're good at.<br> The houses are supposed to reflect how you approach magic as much as the magic itself. </div></div>
Her eyes briefly follow another first-year passing nearby, their own robes cycling through different colours.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall, Nightbloom, Skyreach, Mossgren.<br> Everyone seems convinced they know where they're going already. </div></div>
A faint smile appears.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'm trying not to.<br> Feels like tempting fate. </div></div>
[[Elliot|Ask About Elliot]]--------[[Hexmoor|Ask Alexis About Hexmoor]]--------[[The Houses|Ask Alexis About House Differences]]
[[Finish Breakfast|Breakfast End]]<<set $returnPassage = passage()>>
You ask how she's finding Hexmoor so far.
Alexis looks around the crowded dining hall for a moment before answering.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Honestly?<br> Less intimidating than I expected. </div></div>
She glances toward a group of first-years nearby who are still arguing over where they're supposed to be later.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Elliot made it sound like everyone here would already know exactly what they were doing.<br> Turns out most of us are just pretending. </div></div>
A student hurries past carrying far too many books, nearly losing the top half of the stack before catching it with a quick flick of magic.
Alexis watches them go.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I like it, though.<br> There's always something happening. Even when half of it doesn't make any sense yet. </div></div>
She takes another drink.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Ask me again in a week.<br> I might have completely changed my mind by then. </div></div>
[[Elliot|Ask About Elliot]]--------[[House Selection|Ask Alexis About Houses]]--------[[The Houses|Ask Alexis About House Differences]]
[[Finish Breakfast|Breakfast End]]<<set $returnPassage = passage()>>
Breakfast is beginning to wind down when a clear voice rises above the noise of the dining hall.
<div class="dialogueBox"> <div class="speakerName">Professor ???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> First-years, your attention please. </div></div>
Conversations gradually quieten.
A member of staff you haven't met before stands near the front of the hall, waiting until enough people are listening.
<div class="dialogueBox"> <div class="speakerName">Professor ???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Induction will begin shortly in the Grand Assembly Hall.<br> All first-years should make their way there now. </div></div>
A wave of movement immediately spreads through the room.
Benches scrape against the floor.
Students begin gathering books, bags, pets, and half-finished drinks before joining the growing stream heading for the doors.
Alexis gets to her feet beside you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's us, then. </div></div>
She picks up her things before hesitating.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Actually, you go ahead.<br> I need the bathroom before they trap us in some ceremony for the next hour. </div></div>
She gives you a quick smile.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'll find you in there. </div></div>
Alexis disappears into the crowd heading in the opposite direction.
You gather your own things and prepare to follow the first-years out.
That's when someone steps into the space beside you.
A boy around your age, dressed in immaculate reactive robes.
Unlike most of the first-years you've seen, he doesn't look uncertain in the slightest.
His posture is relaxed but deliberate, his appearance carefully put together, and there's something about the way he carries himself that suggests Hexmoor is exactly where he expected to end up.
His eyes briefly pass over you.
Then linger on the shifting colours of your robes.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You're the one they brought in early. </div></div>
It doesn't sound like a question.
[[Respond to Sebastian|Meet Sebastian]]<<set $returnPassage = passage()>>
You ask Alexis what she actually knows about the four houses.
She thinks for a moment before answering.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mostly what Elliot's told me.<br> Which means I should probably warn you that at least some of this comes with sibling bias. </div></div>
She gestures lightly with her fork.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall tends to attract people who are bold, competitive, and willing to throw themselves into things. </div></div>
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom has more of a reputation for curiosity, ambition, and people who like figuring out how things work. </div></div>
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach is apparently full of clever people who insist they're not competitive while quietly trying to be the best at everything. </div></div>
A faint smile appears.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Elliot is Skyreach, so take that one however you like. </div></div>
She takes another drink.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren seems calmer.<br> Loyal, practical, patient. The sort of people who actually remember to sleep instead of staying up all night studying. </div></div>
She looks around at the mix of house colours filling the hall.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's the stereotype, anyway.<br> I'm guessing the real answer is more complicated. </div></div>
[[Elliot|Ask About Elliot]]--------[[House Selection|Ask Alexis About Houses]]--------[[Hexmoor|Ask Alexis About Hexmoor]]
[[Finish Breakfast|Breakfast End]]<<set $returnPassage = passage()>>
You ask how he knows that.
A small, almost amused smile appears.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> My family has been involved with Hexmoor for generations.<br> We tend to hear about things worth hearing about. </div></div>
He says it casually.
Not like he's trying to impress you.
More like having access to that sort of information is simply normal to him.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> An unscheduled arrival.<br> A private meeting with Thornwell.<br> Personal instruction before the rest of us had even arrived. </div></div>
His eyes settle on you again.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's a considerable amount of attention for someone who hasn't even been sorted yet. </div></div>
There's no accusation in his voice.
If anything, he sounds interested.
But beneath the polished delivery is something unmistakably competitive.
He extends a hand.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sebastian Vane. </div></div>
The name is offered with the quiet confidence of someone accustomed to it meaning something.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I was curious to see whether all that attention was justified. </div></div>
[[Be polite|Sebastian Polite]]--------[[Match his confidence|Sebastian Confident]]--------[[Dismiss his curiosity|Sebastian Dismissive]]
<<set $sebastianRelation = "Rival">>
<<set $sebastianAffinity = 0>>
<<set $sebastianGenitals to "Unknown">>
<<set $sebastianHouse = "Unsorted">>
<<set $returnPassage = passage()>>
<<set $sebastianRelation = "Rival">>
<<set $sebastianAffinity += 1>>
<<run addRelationship("Sebastian Vane", 18, "human")>>
You keep your response civil.
Sebastian watches you for a moment before giving a slight nod.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sensible.<br> I wasn't sure what to expect. </div></div>
There's still something assessing in his expression.
But whatever answer he was expecting, you haven't given him an obvious reason to look down on you.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> We'll see soon enough, I suppose.<br> House Selection tends to reveal quite a lot about people. </div></div>
The last of the first-years are already filing out of the dining hall.
Sebastian falls into step toward the doors, and you join the flow heading for the Grand Assembly Hall.
The conversation continues as you walk.
[[Continue|Sebastian Lineage]]<<set $returnPassage = passage()>>
<<set $sebastianRelation = "Rival">>
<<set $sebastianAffinity += 2>>
<<run addRelationship("Sebastian Vane", 18, "human")>>
You meet his confidence with your own.
Sebastian's expression shifts slightly.
Not irritation.
Interest.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good.<br> I was hoping you wouldn't be intimidated that easily. </div></div>
A faint smile pulls at the corner of his mouth.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It would make all the attention surrounding you considerably less interesting. </div></div>
There's an unmistakable challenge in the way he looks at you now.
But it feels less dismissive than before.
If anything, he seems pleased to have found someone willing to push back.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> We'll see whether you can maintain that confidence once induction begins. </div></div>
A faint smirk lingers as the last of the first-years begin leaving the dining hall.
Sebastian falls into step toward the doors, clearly in no rush to end the conversation.
You join the flow heading for the Grand Assembly Hall.
[[Continue|Sebastian Lineage]]<<set $returnPassage = passage()>>
<<set $sebastianRelation = "Rival">>
<<set $sebastianAffinity -= 2>>
<<run addRelationship("Sebastian Vane", 18, "human")>>
You dismiss his curiosity rather than entertain it.
For the first time, Sebastian's expression cools.
Only slightly.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Charming. </div></div>
He smooths one sleeve of his robes.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I suppose all that special attention had to go to someone's head eventually. </div></div>
The remark is delivered lightly, but the edge underneath it is obvious.
His eyes remain on you for another moment.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Still, induction should answer a few questions.<br> One way or another. </div></div>
The last of the first-years are already filing out of the dining hall.
Sebastian falls into step toward the doors, and the conversation continues as you both join them.
[[Continue|Sebastian Lineage]]<<set $returnPassage = passage()>>
You leave the dining hall alongside Sebastian, joining the stream of first-years moving through Hexmoor.
<<print $petName>> keeps close as the crowd funnels into the wider corridor beyond.
Sebastian walks with the ease of someone already familiar with where he's going.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Vane is a Deepborn family.<br> We've been part of the magical world for generations. </div></div>
He says it matter-of-factly.
There's pride there, certainly, but no hesitation about whether you'll understand what that means.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Several of my relatives attended Hexmoor.<br> A few still have rather useful connections here. </div></div>
That explains how news of your early arrival reached him before you'd even met.
Sebastian glances sideways at you.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> What about you?<br> What's your lineage? </div></div>
<<if $bloodstatus is "Deepborn">>
<<set $sebastianAffinity += 2>>
You tell him you're Deepborn as well.
Sebastian's interest sharpens.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Deepborn.<br> Interesting. </div></div>
He studies you for another moment.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I don't recognise your family name.<br> Then again, there are plenty of old families outside the circles mine tends to move in. </div></div>
There's noticeably more respect in his tone now.
It doesn't make him any less competitive.
If anything, quite the opposite.
<<elseif $bloodstatus is "Mixed-Line">>
<<set $sebastianAffinity += 0>>
You tell him you're Mixed-Line.
Sebastian gives a small nod.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mixed-Line.<br> Common enough these days. </div></div>
The answer neither impresses nor disappoints him.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Though that still leaves the more interesting question of why Thornwell seems so interested in you. </div></div>
His attention lingers for a moment before returning to the corridor ahead.
<<elseif $bloodstatus is "Arcane-Locked">>
<<set $sebastianAffinity -= 1>>
You explain that you're Arcane-Locked.
Sebastian actually looks surprised.
Only briefly, but it's the first genuine crack you've seen in his composure.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Arcane-Locked? </div></div>
His eyes move over you again.
This time, the assessment is considerably more thorough.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> No magical parents, no established lineage... and Thornwell personally brings you in early. </div></div>
There is the faintest trace of scepticism beneath his curiosity.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's certainly not what I was expecting. </div></div>
A faint smile returns.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Though I suppose that makes Thornwell's interest considerably more intriguing. </div></div>
<</if>>
The crowd ahead begins turning toward a set of broad doors further down the corridor.
Beyond them, the voices of dozens of first-years echo through a much larger chamber.
The Grand Assembly Hall.
Sebastian glances toward the entrance.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Looks like we're about to find out whether all that attention was warranted. </div></div>
[[Enter the Grand Assembly Hall|Grand Assembly Arrival]]<div style="text-align:center;">
<h2>Sebastian Vane</h2>
</div>
Age: 18
House: <<print $sebastianHouse>>
Year: First Year
Pronouns: He/Him/His
Relation to you: <<print $sebastianRelation>>
Height & Build: 6'0"; lean-athletic build with a polished, self-assured posture
Face: Sharp, refined features; cool grey-blue eyes with an observant, assessing gaze
Hair: Dark brown, thick and neatly styled, rarely seeming out of place
Skin: Fair complexion, well-kept and unblemished
Expression: Usually composed with a faint, knowing smirk; carries himself like someone accustomed to being taken seriously
Clothing: Immaculate Hexmoor student robes, always carefully arranged; before House Selection, the reactive seams shift through the academy colours
Chest & Build: Lean chest and defined shoulders, athletic without being bulky
Waist & Figure: Narrow waist with a balanced, well-conditioned frame
Arse: Firm and proportional, understated beneath his robes
Genitals: <<print $sebastianGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>>
You pass through the broad doors with Sebastian and step into the Grand Assembly Hall.
The space beyond is nothing like the dining hall.
Rather than long tables or rows of benches, the chamber descends in wide circular tiers around a central stone floor.
Four enormous arched recesses break up the walls, each marked by one of Hexmoor's house colours.
Emberfall burns warm orange.
Nightbloom glows deep violet.
Skyreach shines in pale cyan.
Mossgren rests beneath a softer green.
Above the centre of the chamber, several enormous metal rings hang suspended in the air.
They rotate slowly around one another without any visible support, their surfaces covered in lines of faintly glowing runes.
Every few seconds, one passes through another as though neither were completely solid.
Light spills down from them across the central floor.
Hundreds of first-years are already gathering across the stepped seating.
Some talk excitedly.
Others sit almost completely silent.
Reactive robes shift with colour throughout the crowd, making the entire chamber seem to flicker between the four houses.
Several professors stand around the central floor while other members of staff move between the tiers directing students toward open spaces.
At the far end, a raised circular platform waits beneath the largest of the suspended rings.
Headmaster Thornwell is already there, speaking quietly with several professors.
Sebastian slows only briefly once you're inside.
His attention moves across the chamber, then away from you.
Without saying anything, he breaks off from your side and heads toward another cluster of first-years further down the tier.
No goodbye.
No explanation.
Just the quiet assumption that the conversation is over because he's decided it is.
You are left standing with <<print $petName>> as more students continue filing in around you.
For once, nobody is guiding you.
Hawthorne is nowhere nearby.
Alexis still hasn't returned.
A member of staff gestures toward the remaining open seats.
<div class="dialogueBox"> <div class="speakerName">Professor ???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Find a seat, please.<br> We'll be beginning shortly. </div></div>
You make your way further into the chamber.
The rotating rings overhead cast shifting patterns of light across your robes as you search for somewhere to sit.
[[Find a seat|Assembly Seating]]
<<set $maraVossRelation = "Professor">>
<<set $maraVossGenitals = "Unknown">><<set $returnPassage = passage()>>
You follow the curve of the chamber until you find an open place among the circular tiers.
<<print $petName>> settles nearby as you take your seat.
Around you, the last of the first-years continue filtering into the hall.
Some immediately claim spaces beside people they already know.
Others hover uncertainly in the aisles until members of staff direct them somewhere.
The professor from the dining hall is doing most of the directing.
She moves along the lower tier with brisk efficiency, pointing students toward empty seats and stopping anyone trying to linger in the walkways.
<div class="dialogueBox"> <div class="speakerName">Professor ???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Keep moving.<br> There are several hundred seats in this room. I'm confident you can manage to find one. </div></div>
A few students hurry along.
Apparently satisfied, she turns her attention toward another group trying to squeeze five people into space meant for three.
<div class="dialogueBox"> <div class="speakerName">Professor ???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Unless one of you has developed compression magic overnight, spread out. </div></div>
That gets them moving.
Judging by the way students respond whenever she speaks, she doesn't seem to need much help controlling a room.
The remaining gaps gradually fill.
For a moment, you wonder whether Alexis is actually going to make it back in time.
Then you spot her weaving quickly through the upper aisle.
She sees you almost immediately.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There you are. </div></div>
She slips into the empty seat beside you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Thought I was going to end up stuck at the back with people I don't know. </div></div>
The unfamiliar professor passes through the aisle below.
One look from her is enough for Alexis to lower her voice.
She waits until the professor has moved a little further away.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's Professor Voss.<br> Applied Enchantments. Emberfall. </div></div>
Alexis glances after her.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Elliot warned me about her.<br> Apparently she's good. Just don't waste her time. </div></div>
Alexis settles properly into her seat as the noise around the chamber gradually begins to fall.
[[Wait for induction to begin|Before Induction]]
<<set $maraVossRelation = "Professor">>
<<set $maraVossGenitals = "Unknown">><div style="text-align:center;">
<h2>Professor Mara Voss</h2>
</div>
Age: 44
House: Emberfall
Subject: Applied Enchantments
Pronouns: She/Her/Hers
Relation to you: <<print $maraVossRelation>>
Height & Build: 5'8"; lean, well-kept build with an upright, purposeful posture
Face: Strong, defined features with sharp cheekbones and an intense, observant gaze
Hair: Dark auburn, cut to shoulder length and usually kept neatly tied back while teaching
Skin: Fair with a lightly weathered complexion that suggests plenty of time spent around practical magic rather than behind a desk
Expression: Usually composed and mildly impatient, with the occasional dry smirk when someone manages to surprise her
Clothing: Structured Emberfall teaching robes with dark charcoal fabric and restrained orange detailing; usually practical rather than decorative, with reinforced sleeves and several small enchanted tools kept close at hand
Breast Size: Moderate, proportional
Hips & Figure: Lean hourglass figure with a firm, balanced frame
Arse: Firm and proportional, understated beneath her robes
Genitals: <<print $maraVossGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>>
The hall is nearly full now.
Professor Voss makes one final circuit of the lower tiers before moving toward the central floor.
Around you, conversations settle into quieter murmurs.
Alexis shifts in her seat beside you, taking in the chamber properly for the first time.
A few rows away, Sebastian glances in your direction.
Only briefly.
But Alexis catches it.
Her eyes move from him to you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Do you know him? </div></div>
She nods subtly toward Sebastian.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> He keeps looking over here like he's trying to work something out. </div></div>
She studies him for another moment.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Who is— </div></div>
The great doors behind the central floor close.
The sound rolls through the chamber.
Every conversation begins dying away.
Professor Voss straightens immediately.
Then the suspended rings overhead stop turning.
One by one, the runes carved across them brighten.
A doorway opposite the first-year tiers opens.
Headmaster Thornwell steps into the Grand Assembly Hall.
He isn't alone.
Several senior members of staff follow behind him, spreading out along the edge of the central floor as Thornwell walks toward the raised platform.
The remaining whispers disappear.
Even Alexis forgets whatever she was about to ask.
Thornwell reaches the centre of the chamber.
For a moment, he simply looks out across the gathered first-years.
Then he smiles.
[[Listen to the Headmaster|Induction Opening]]
<<run addRelationship("Professor Mara Voss", 44, "human")>>
<<set $returnPassage = passage()>>
Thornwell lets the silence settle before speaking.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good morning.<br> And welcome to Hexmoor Academy. </div></div>
His voice carries easily through the circular chamber.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> For many of you, yesterday was your first real step into the magical world.<br> For others, Hexmoor has been expected for most of your lives. </div></div>
Your eyes briefly drift across the gathered first-years.
Some look completely at home.
Others look about as overwhelmed as you feel.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Regardless of where you came from, from this morning onward you begin here on equal footing.<br> What you do with that opportunity is your responsibility. </div></div>
He begins walking slowly across the raised platform.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your education at Hexmoor will normally last four years.<br> The first will give you the foundations necessary to use magic safely, deliberately, and with some understanding of what you're actually doing. </div></div>
A few quiet laughs ripple through the chamber.
Thornwell allows himself a faint smile.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I assure you, that final part becomes considerably more important once things begin exploding. </div></div>
Even Professor Voss looks faintly amused.
Thornwell turns back toward the gathered students.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your later years will give you greater freedom to specialise.<br> But first, every one of you needs the same foundation. </div></div>
Above him, the enormous metal rings continue their slow, impossible rotation.
[[Continue listening|Induction Expectations]]<<set $returnPassage = passage()>>
Thornwell comes to a stop near the centre of the platform.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hexmoor is not a school for children.<br> You are adults, and you will be treated as such. </div></div>
The words settle over the hall.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That means freedom.<br> It also means responsibility. </div></div>
He gestures lightly toward the gathered students.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Attend your required classes. Respect restricted areas. Do not use dangerous magic without proper supervision, and do not turn disagreements with one another into unsanctioned duels in the corridors. </div></div>
A few students exchange looks.
Professor Voss folds her arms.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you damage something through carelessness, expect to repair it.<br> If you endanger someone deliberately, expect consequences considerably more serious than that. </div></div>
His tone never becomes harsh.
It doesn't need to.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Beyond those boundaries, I encourage you to use your time here well.<br> Study. Practise. Make mistakes worth learning from. Meet people you would never otherwise have known. </div></div>
His gaze passes across the tiers.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Hexmoor will give you opportunities.<br> It will not decide what sort of person you become with them. </div></div>
For a moment, the chamber is completely still.
Then Thornwell looks upward.
The great rings continue turning above the central floor.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Before any of that begins, however, there is one tradition every Hexmoor student must pass through. </div></div>
[[Continue|House Selection Introduction]]<<set $returnPassage = passage()>>
Thornwell lets the moment hang before turning toward the centre of the chamber.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> House Selection. </div></div>
A murmur runs through the first-years.
Above him, the enormous metal rings continue their slow rotation.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Every student who enters Hexmoor is placed into one of four houses.<br> Emberfall. Nightbloom. Skyreach. Mossgren. </div></div>
As each name is spoken, the corresponding colours around the chamber brighten faintly.
Orange.
Violet.
Cyan.
Green.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your house will become your home within Hexmoor.<br> You'll live among its students, share its traditions, and represent it throughout your time here. </div></div>
He glances upward.
One of the great rings shifts slightly out of alignment with the others before sliding back into place.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The selection itself is simple.<br> When your name is called, come to the central platform and stand within the ring. </div></div>
Several first-years look up.
Alexis leans slightly closer to you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Elliot somehow forgot to mention the enormous floating ring part. </div></div>
Thornwell continues.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The Founders' Rings will do the rest.<br> You may experience something while the selection takes place. A vision. A memory. Something more difficult to describe. </div></div>
His expression softens slightly.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Do not fight it.<br> Whatever you see is yours alone. </div></div>
A few students shift uneasily in their seats.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Most of you will be shown a clear path.<br> Occasionally, the Rings recognise more than one. In that case, the final choice belongs to you. </div></div>
That produces a louder ripple of whispers.
Professor Voss steps forward carrying a narrow roll of parchment.
Thornwell moves aside.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> When your name is called, come down promptly.<br> There are a lot of you. </div></div>
She unrolls the parchment.
The first name is called.
[[Watch the first selection|First House Selection]]<<set $returnPassage = passage()>>
Professor Voss looks down at the parchment.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Daniel Mercer. </div></div>
A nervous-looking first-year rises from one of the lower tiers.
The room quietens as he makes his way down toward the central platform.
He steps into position beneath the rotating rings.
For a moment, nothing happens.
Then one of the enormous metal rings above shifts free from the others.
It passes cleanly through another ring as it descends, the glowing runes across its surface brightening as it lowers around him.
Daniel stands in the centre.
The ring begins to turn.
Slowly at first.
Then faster.
The runes blur into a continuous band of light around him.
His expression goes distant.
Whatever he can see, it isn't the Assembly Hall anymore.
Nobody speaks.
Even Professor Voss waits.
Several seconds pass.
Then the ring slows.
Green light spreads through the runes.
At the same moment, the shifting seams of Daniel's robes settle.
Mossgren green.
The corresponding archway around the chamber brightens in response.
A burst of applause rises from the Mossgren section.
Daniel blinks as though waking from a dream.
For half a second, he looks completely lost.
Then he sees his robes.
A grin breaks across his face.
The ring rises away from him, passing effortlessly back through the others before resuming its place in their endless rotation.
Professor Voss barely waits for him to leave the platform before looking down at the parchment again.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Rebecca Holt. </div></div>
Another first-year stands.
Alexis watches the platform closely beside you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Okay.<br> That looked slightly less terrifying than I expected. </div></div>
[[Watch a few more selections|Selection Montage]]<<set $returnPassage = passage()>>
The next few selections move more quickly now that everyone understands the process.
Rebecca Holt steps onto the platform.
The ring descends.
For several seconds, nothing changes.
Then violet light races through the runes.
Nightbloom.
Her robes settle almost immediately, and a cheer rises from the matching section of the chamber.
Another name follows.
Then another.
Emberfall.
Skyreach.
Mossgren.
One after another, the first-years step forward, disappear briefly into whatever the Rings show them, and return wearing a single settled colour.
The tension in the room gradually changes.
At first, everyone watches with nervous fascination.
Before long, reactions start coming faster.
Cheers.
Applause.
Occasional groans from friends who clearly hoped to end up together.
Professor Voss keeps the whole process moving with ruthless efficiency.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Next.<br> Please remember that staring at your new sleeves does not prevent you from walking. </div></div>
A recently sorted Skyreach student hurriedly moves off the platform.
Alexis laughs quietly beside you.
Then Professor Voss looks back down at the parchment.
Her finger moves further along the list.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Alexis Vale. </div></div>
Alexis goes completely still for half a second.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Right.<br> Guess that's me. </div></div>
She gets to her feet and starts down toward the central floor.
[[Watch Alexis's selection|Alexis House Selection]]<<set $returnPassage = passage()>>
Alexis makes her way down the circular tiers toward the central platform.
She looks composed from a distance.
Mostly.
As she steps beneath the suspended rings, one of them shifts free from the formation overhead.
It descends slowly, passing through the others as though they aren't entirely solid.
The ring settles around her.
Then it begins to turn.
The runes brighten.
Alexis's expression goes distant almost immediately.
For several seconds, she simply stands there.
Still.
Silent.
Whatever she sees, nobody else in the chamber can.
Then violet begins spreading through the runes.
The colour deepens.
Nightbloom.
The seams of Alexis's reactive robes follow a moment later, their constant shifting finally stopping as rich violet settles permanently into the fabric.
Applause rises from the Nightbloom section.
Alexis blinks as the ring slows around her.
Her eyes drop immediately to her robes.
For a moment, she just stares.
Then that familiar half-smile appears.
She looks up toward the Nightbloom students and begins making her way from the platform.
The ring rises after her, passing back through the others before returning to its place overhead.
Professor Voss checks the parchment again.
The selections continue.
You catch Alexis glancing back toward you once before she disappears into the growing group of newly sorted Nightbloom students.
[[Continue watching|More House Selections]]
<<set $alexisHouse = "Nightbloom">><<set $returnPassage = passage()>>
The next few names pass in a steady rhythm.
One student joins Skyreach.
Another is claimed by Mossgren.
Then Emberfall.
By now, the hall has settled into the pattern.
A name.
A walk to the platform.
The ring descends.
A few silent seconds.
Then colour.
You start recognising the slight differences in how people return from the Reflection.
Some look relieved.
Some look stunned.
A few look almost disappointed.
Then Professor Voss reaches another name.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sebastian Vane. </div></div>
Several heads turn before Sebastian even stands.
He rises without hesitation.
No nerves.
No visible uncertainty.
He makes his way down toward the central platform with the same composed confidence he carried through the dining hall.
The ring begins to separate from the others before he's even fully settled beneath it.
It descends around him.
Sebastian barely reacts.
The runes ignite.
For several seconds, he stands motionless within the spinning metal.
Then orange light erupts across the ring.
Emberfall.
The colour races through the seams of his robes, replacing their constant shifting with a deep, unmistakable orange.
A loud cheer rises from the Emberfall section.
Sebastian looks down at his robes.
A small smile appears.
Not surprise.
Satisfaction.
As though the Rings have simply confirmed something he already believed.
His gaze lifts.
For the briefest moment, his eyes find you among the first-years still waiting.
Then he turns and joins Emberfall.
The ring rises back into the formation overhead.
Professor Voss returns to the parchment.
There are fewer unsorted students around you now.
And your name still hasn't been called.
[[Continue|Approaching Your Selection]]
<<set $sebastianHouse = "Emberfall">><<set $returnPassage = passage()>>
The selections continue.
But there are fewer and fewer unsorted students left around you.
Every time Professor Voss looks down at the parchment, you find yourself waiting for your name.
Another student goes to Skyreach.
Then Mossgren.
Two more join Nightbloom in quick succession.
Across the chamber, Alexis has found a place among her new housemates.
She catches your eye and gives you a small encouraging smile.
Sebastian is harder to miss.
He sits comfortably among Emberfall, already looking as though the orange in his robes has always belonged there.
Professor Voss calls another name.
Not yours.
The student returns wearing Skyreach cyan.
By now, only a scattered handful of reactive robes remain among the tiers.
Yours still refuses to settle.
Orange slips through the seams.
Then violet.
Cyan.
Green.
Professor Voss looks down at the parchment again.
This time, she pauses.
Her eyes lift toward you.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> <<print $name>>. </div></div>
The chamber suddenly feels considerably larger.
You rise and begin making your way down toward the central floor, <<print $petName>> remaining behind near your seat.
More eyes follow you than they did most of the students before.
You already know why.
The early arrival.
Thornwell.
The rumours Sebastian mentioned.
You reach the central platform.
Professor Voss gestures toward its centre.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Stand there.<br> Let the Rings do the work. </div></div>
You step into position.
For a moment, everything happens exactly as it did for everyone else.
One of the enormous rings begins shifting away from the formation overhead.
Then it stops.
The other three stop with it.
Every ring above the chamber becomes perfectly still.
A murmur spreads through the tiers.
Professor Voss looks up.
Hawthorne straightens where she stands among the staff.
Even Thornwell's expression changes.
Then all four rings move at once.
[[Continue|Your House Selection]]
<<set $emberfallScore = 0>>
<<set $nightbloomScore = 0>>
<<set $skyreachScore = 0>>
<<set $mossgrenScore = 0>>
<<set $returnPassage = passage()>>
All four rings move at once.
They begin rotating around one another again, but much faster than before.
The runes across their surfaces flare.
Orange.
Violet.
Cyan.
Green.
The colours chase one another around the metal so quickly that they begin bleeding together into white light.
Whispers spread through the chamber.
Professor Voss takes a cautious step back from the platform.
Thornwell doesn't.
His attention is fixed entirely on the Rings.
Hawthorne watches from among the staff, her expression tightening slightly.
One ring finally separates from the others.
It descends toward you.
But the remaining three don't return to their usual rhythm.
They continue moving overhead, their runes glowing brighter with every rotation.
The descending ring settles around you.
For a moment, nothing happens.
Then it turns.
Once.
Twice.
Faster.
The Grand Assembly Hall begins to blur around you.
The tiers disappear first.
Then the students.
Alexis.
Sebastian.
The professors.
Even Thornwell.
The last thing you see is the light of all four Rings burning overhead.
Then everything goes dark.
[[Continue|Founders Reflection]]<<set $returnPassage = passage()>>
Silence.
Complete and absolute.
When your vision returns, you aren't standing in the Assembly Hall anymore.
A vast empty space stretches around you beneath a colourless sky.
The ground beneath your feet is smooth black stone, disappearing into pale mist in every direction.
Ahead, four paths extend away from you.
For a moment, you can almost make out someone standing at the end of each one.
Four distant figures.
Then the mist shifts.
Their shapes disappear.
A voice reaches you from somewhere you can't place.
Not male.
Not female.
Not old or young.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Before you can know where you belong... </div></div>
The four paths begin to fade.
The black stone beneath your feet changes.
Something new begins forming around you.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You must first show us who you are. </div></div>
[[Who are you?]]<<set $returnPassage = passage()>>
The darkness around you begins to change.
Stone forms beneath your feet.
Walls rise through the mist.
When everything settles, you find yourself standing in an unfamiliar corridor.
Ahead, another student is backed against the wall.
Three others stand around them.
One has taken something from their bag and is holding it just beyond their reach.
Nobody else is nearby.
The scene feels real.
The anger in the student's face.
The laughter from the others.
Even the cold stone beneath your feet.
You somehow know that you could simply keep walking.
Whatever happens next is your choice.
[[Step in immediately and confront them.|Reflection 1 Emberfall]]
---
[[Hang back for a moment and work out what's really happening.|Reflection 1 Nightbloom]]
---
[[Find the quickest way to end the situation without making it worse.|Reflection 1 Skyreach]]
---
[[Go to the student being targeted and make sure they're alright first.|Reflection 1 Mossgren]]<<set $returnPassage = passage()>>
<<set $emberfallScore += 2>>
<<set $mossgrenScore += 1>>
You step forward before you've had time to reconsider.
The scene dissolves around you.
[[Continue|Reflection Question 2]]<<set $returnPassage = passage()>>
<<set $nightbloomScore += 2>>
<<set $skyreachScore += 1>>
You hold back, watching long enough to understand what you're actually seeing.
The scene dissolves around you.
[[Continue|Reflection Question 2]]<<set $returnPassage = passage()>>
<<set $nightbloomScore += 2>>
<<set $skyreachScore += 1>>
You hold back, watching long enough to understand what you're actually seeing.
The scene dissolves around you.
[[Continue|Reflection Question 2]]<<set $returnPassage = passage()>>
<<set $mossgrenScore += 2>>
<<set $emberfallScore += 1>>
Your attention goes first to the person who actually needs you.
The scene dissolves around you.
[[Continue|Reflection Question 2]]<<set $returnPassage = passage()>>
For a moment, there is nothing around you.
Then another place begins to form.
A small study.
Shelves packed with old books cover the walls, and a single desk sits beneath a narrow window.
Something rests on it.
A small black box covered in silver runes.
You don't know how you know, but you understand two things immediately.
It contains something powerful.
And you are not supposed to open it.
There is nobody here to stop you.
No professor.
No witness.
Just the box.
[[Open it. If someone went this far to hide it, you want to know why.|Reflection 2 Nightbloom]]
---
[[Leave it alone. Some rules exist because the consequences aren't worth discovering.|Reflection 2 Mossgren]]
---
[[Study the runes and the box itself without opening it.|Reflection 2 Skyreach]]
---
[[Open it. Whatever is inside, you're confident you can handle it.|Reflection 2 Emberfall]]<<set $returnPassage = passage()>>
<<set $nightbloomScore += 2>>
<<set $emberfallScore += 1>>
Curiosity wins.
You reach for the lid, wanting to know what could possibly justify hiding something so carefully.
Just before your fingers touch the box, the study dissolves into mist.
[[Continue|Reflection Question 3]]<<set $returnPassage = passage()>>
<<set $mossgrenScore += 2>>
<<set $skyreachScore += 1>>
You leave the box where it is.
Whatever power sits inside it isn't worth risking simply because nobody is here to stop you.
The study fades around you.
[[Continue|Reflection Question 3]]<<set $returnPassage = passage()>>
<<set $skyreachScore += 2>>
<<set $nightbloomScore += 1>>
You resist opening it.
Instead, you lean closer and begin studying the silver runes, looking for some clue to what the box is or how it works.
The moment you focus on the pattern, the study dissolves.
[[Continue|Reflection Question 3]]<<set $returnPassage = passage()>>
<<set $emberfallScore += 2>>
<<set $nightbloomScore += 1>>
You reach for the box without hesitation.
Whatever is inside, you're willing to face the consequences of finding out.
Before you can open it, the study disappears around you.
[[Continue|Reflection Question 3]]<<set $returnPassage = passage()>>
Another scene forms around you.
This time, you're standing in a crowded common room.
Students talk nearby, distracted by their own conversations.
Across the room, you notice someone reach into an unattended bag.
They remove a small enchanted pendant and slip it into their pocket.
Nobody else sees it happen.
The owner returns moments later, completely unaware.
The thief begins heading for the door.
[[Stop them immediately and demand they return what they took.|Reflection 3 Emberfall]]
---
[[Follow them first. You want to know why they stole it before deciding what to do.|Reflection 3 Nightbloom]]
---
[[Make sure you can prove what happened, then report the theft properly.|Reflection 3 Skyreach]]
---
[[Recover the pendant quietly and return it to its owner without turning the situation into a spectacle.|Reflection 3 Mossgren]]<<set $returnPassage = passage()>>
<<set $emberfallScore += 2>>
<<set $mossgrenScore += 1>>
You move before the thief can reach the door.
Whatever excuse they might have, you're not letting them walk away with something that isn't theirs.
The common room dissolves around you.
[[Continue|Reflection Question 4]]<<set $returnPassage = passage()>>
<<set $nightbloomScore += 2>>
<<set $skyreachScore += 1>>
You follow rather than confront them immediately.
There is more to understand here, and you want the full picture before deciding what comes next.
The scene fades into mist.
[[Continue|Reflection Question 4]]<<set $returnPassage = passage()>>
<<set $skyreachScore += 2>>
<<set $emberfallScore += 1>>
You hold back long enough to make sure you can prove exactly what happened.
Once you're certain, you move to deal with it properly.
The common room disappears.
[[Continue|Reflection Question 4]]<<set $returnPassage = passage()>>
<<set $mossgrenScore += 2>>
<<set $nightbloomScore += 1>>
Your priority is getting the pendant back to the person it belongs to.
You move quietly, looking for a way to recover it without creating more trouble than necessary.
The scene dissolves around you.
[[Continue|Reflection Question 4]]<<set $returnPassage = passage()>>
The mist clears again.
You find yourself standing at the edge of a quiet courtyard after dark.
Two students are facing one another near the centre.
Wands raised.
Magic flashes between them.
Not practice.
Not supervised.
A real duel.
One spell cracks against the stone beside the other student's head.
You know immediately that this isn't permitted.
No professor is nearby.
Neither of them has noticed you yet.
[[Alert a professor rather than risk making an already dangerous situation worse.|Reflection 4 Skyreach]]
---
[[Try to calm them down and get both of them to stop before anyone gets hurt.|Reflection 4 Mossgren]]
---
[[Step between them and force the duel to stop.|Reflection 4 Emberfall]]
---
[[Stay hidden for a moment and work out what started it before interfering.|Reflection 4 Nightbloom]]<<set $returnPassage = passage()>>
<<set $emberfallScore += 2>>
<<set $skyreachScore += 1>>
You move straight toward the duel.
Someone has to stop it, and waiting risks one of them getting badly hurt.
The courtyard disappears around you.
[[Continue|Reflection Question 5]]<<set $returnPassage = passage()>>
<<set $nightbloomScore += 2>>
<<set $skyreachScore += 1>>
You stay out of sight for a moment longer.
Before choosing a side or interfering, you want to understand what drove them this far.
The scene dissolves into mist.
[[Continue|Reflection Question 5]]<<set $returnPassage = passage()>>
<<set $skyreachScore += 2>>
<<set $mossgrenScore += 1>>
You decide not to throw yourself into the middle of flying spells.
Getting someone with the authority and experience to stop this safely makes more sense.
You turn to find help.
The courtyard dissolves around you.
[[Continue|Reflection Question 5]]<<set $returnPassage = passage()>>
<<set $mossgrenScore += 2>>
<<set $emberfallScore += 1>>
You step forward, not to fight, but to stop things before either of them gets seriously hurt.
Whatever started this can be dealt with after the danger is over.
The courtyard fades into mist.
[[Continue|Reflection Question 5]]<<set $returnPassage = passage()>>
The mist gathers one final time.
When it clears, you are standing alone in a vast stone chamber.
At its centre floats a small sphere of pale light.
You understand what it offers without being told.
Power.
Enough to make you stronger than you are now.
Enough to make difficult things easier.
But taking it would come at a cost.
Someone else would lose an opportunity they had fairly earned.
They would never know you were responsible.
Nobody would.
The light waits.
[[Leave it. If the power isn't yours to take, you don't want it.|Reflection 5 Mossgren]]
---
[[Take it. Opportunities like this don't come twice, and you'd make better use of it.|Reflection 5 Emberfall]]
---
[[Study it first. There may be another way to gain what it offers without stealing it from someone else.|Reflection 5 Skyreach]]
---
[[Take it, but only after understanding exactly who loses out and why the opportunity exists in the first place.|Reflection 5 Nightbloom]]<<set $returnPassage = passage()>>
<<set $mossgrenScore += 2>>
<<set $skyreachScore += 1>>
You leave the light untouched.
Whatever it could give you, taking it would mean benefiting from something that was never yours.
The chamber begins to fade.
[[Continue|Reflection Result]]<<set $returnPassage = passage()>>
<<set $emberfallScore += 2>>
<<set $nightbloomScore += 1>>
You reach for the light.
The opportunity is here, and you're not willing to let it pass simply because someone else expected it first.
Before your hand reaches it, the chamber dissolves.
[[Continue|Reflection Result]]<<set $returnPassage = passage()>>
<<set $skyreachScore += 2>>
<<set $mossgrenScore += 1>>
You refuse to accept that the choice has to be so simple.
Rather than take the light, you begin looking for another way to achieve the same result without costing someone else their opportunity.
The chamber fades around you.
[[Continue|Reflection Result]]<<set $returnPassage = passage()>>
<<set $nightbloomScore += 2>>
<<set $skyreachScore += 1>>
You don't reach for the light immediately.
Before deciding whether the opportunity is worth taking, you want to understand who loses it, why they were chosen, and why the choice has been placed in front of you at all.
The chamber dissolves into mist.
[[Continue|Reflection Result]]<<set $returnPassage = passage()>>
<<set _highestScore = Math.max($emberfallScore, $nightbloomScore, $skyreachScore, $mossgrenScore)>>
<<set _topHouses = []>>
<<if $emberfallScore is _highestScore>>
<<run _topHouses.push("Emberfall")>>
<</if>>
<<if $nightbloomScore is _highestScore>>
<<run _topHouses.push("Nightbloom")>>
<</if>>
<<if $skyreachScore is _highestScore>>
<<run _topHouses.push("Skyreach")>>
<</if>>
<<if $mossgrenScore is _highestScore>>
<<run _topHouses.push("Mossgren")>>
<</if>>
For a moment, there is nothing.
No chamber.
No light.
No sound.
Then the smooth black stone returns beneath your feet.
The pale mist rolls slowly around you.
Ahead, the four paths have returned.
And so have the figures standing at their ends.
This time, you can see them more clearly.
Four people.
Four silhouettes waiting silently through the mist.
Something has changed, though.
The paths no longer feel equal.
<<if _topHouses.length is 1>>
Three of the distant figures begin to fade.
Their paths disappear with them, swallowed by the mist until only one remains.
Someone is waiting for you.
<<if _topHouses[0] is "Emberfall">>
[[Approach the figure|Emberfall Founder]]
<<elseif _topHouses[0] is "Nightbloom">>
[[Approach the figure|Nightbloom Founder]]
<<elseif _topHouses[0] is "Skyreach">>
[[Approach the figure|Skyreach Founder]]
<<else>>
[[Approach the figure|Mossgren Founder]]
<</if>>
<<else>>
Two paths remain clear while the others disappear into the mist.
Two figures remain.
Neither steps forward.
Neither fades.
For reasons you can't explain, you understand what that means.
This time, the choice is yours.
<<if _topHouses.includes("Emberfall")>>
[[Approach the figure surrounded by warm orange light|Choose Emberfall Founder]]
<</if>>
<<if _topHouses.includes("Nightbloom")>>
[[Approach the figure surrounded by deep violet light|Choose Nightbloom Founder]]
<</if>>
<<if _topHouses.includes("Skyreach")>>
[[Approach the figure surrounded by pale cyan light|Choose Skyreach Founder]]
<</if>>
<<if _topHouses.includes("Mossgren")>>
[[Approach the figure surrounded by soft green light|Choose Mossgren Founder]]
<</if>>
<</if>><<set $returnPassage = passage()>>
The mist thins as you follow the remaining path.
Warm orange light begins to bleed through it.
A figure waits ahead.
As you draw closer, the details sharpen.
A broad-shouldered man stands with the ease of someone who has never needed to make himself look imposing.
Dark red-brown hair.
A closely trimmed beard.
Old burn scars trace across one hand.
His robes are worn and practical, marked by use rather than ceremony.
He watches you approach without speaking.
For a moment, it feels less like meeting someone and more like being weighed.
Then he smiles.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You don't like waiting for someone else to act. </div></div>
His eyes remain fixed on you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> When something is wrong, you would rather step forward than stand safely at the edge of it. </div></div>
He begins walking slowly around you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Curiosity pulls at you. So does ambition.<br> But when the moment comes, you trust yourself to deal with the consequences of your choices. </div></div>
He stops in front of you again.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's useful.<br> It's also dangerous. </div></div>
A faint amusement enters his expression.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Courage and recklessness are close relatives.<br> Ambition and arrogance even closer. </div></div>
The orange light around him grows brighter.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall won't teach you to hesitate.<br> It'll teach you when moving first is worth the risk. </div></div>
He extends his scarred hand toward you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What matters more to you? </div></div>
[[Having the courage to act when it matters.|Emberfall Founder Courage]]
---
[[Becoming strong enough that hesitation is unnecessary.|Emberfall Founder Strength]]
---
[[Proving that I can handle whatever comes next.|Emberfall Founder Prove]]
---
[[Knowing when not to act at all.|Emberfall Founder Restraint]]<<set $returnPassage = passage()>>
The mist thins as you follow the remaining path.
Deep violet light begins to glow through it.
A woman waits ahead.
Tall.
Still.
Long black hair falls around her shoulders, faint strands of silver catching the light whenever she moves.
Her robes are dark violet, simple in shape but covered in subtle patterns that seem to shift when you look away from them.
Her eyes settle on you immediately.
Not warmly.
Not coldly.
Curiously.
As though you're a question she hasn't decided how to answer yet.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You dislike not knowing. </div></div>
She steps closer.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Rules interest you less than the reasons behind them.<br> Secrets even more so. </div></div>
Her gaze remains fixed on you.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You would rather understand something dangerous than remain safely ignorant of it. </div></div>
A faint smile touches her expression.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Useful.<br> Provided curiosity does not become an excuse for foolishness. </div></div>
The violet mist curls slowly around her feet.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Knowledge has consequences.<br> So does choosing not to seek it. </div></div>
She studies you for another long moment.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom would not ask you to stop questioning.<br> It would ask whether you're prepared for the answers. </div></div>
She extends one hand toward you.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tell me, then.<br> What do you seek when you look into the unknown? </div></div>
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tell me, then.<br> What do you seek when you look into the unknown? </div></div>
[[Understanding. Even dangerous truths are better than ignorance.|Nightbloom Founder Understanding]]
---
[[Power. Knowledge matters most when it can be used.|Nightbloom Founder Power]]
---
[[Possibility. I want to know what others haven't thought to ask.|Nightbloom Founder Possibility]]
---
[[Certainty. I want enough knowledge that nothing catches me unprepared.|Nightbloom Founder Certainty]]<<set $returnPassage = passage()>>
The mist thins as you follow the remaining path.
Pale cyan light begins to gather through it.
A man waits ahead.
Lean, composed, and perfectly still.
His pale blond-grey hair is neatly kept, and several thin metallic instruments float silently around him, turning in slow, precise patterns.
His robes are immaculate.
So is his posture.
His sharp blue eyes settle on you with immediate focus.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You prefer understanding before action. </div></div>
One of the metallic instruments beside him turns slightly.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> When faced with uncertainty, you look for structure.<br> Evidence. Patterns. The part everyone else overlooked. </div></div>
He regards you for another moment.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You do not mistake caution for weakness.<br> Nor do you see preparation as an excuse to avoid difficult choices. </div></div>
The faintest hint of approval reaches his expression.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Precision is valuable.<br> Perfection is considerably more dangerous. </div></div>
The instruments around him stop moving.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There will always be another calculation to make.<br> Another possibility to consider.<br> Eventually, even the cleverest mind must decide. </div></div>
Cyan light spreads across the mist around you.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach would expect discipline from you.<br> Not because you lack talent, but because talent without control is simply wasted potential. </div></div>
He raises one hand.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What makes knowledge worth having? </div></div>
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What makes knowledge worth having? </div></div>
[[Being able to use it well.|Skyreach Founder Application]]
---
[[Understanding something completely.|Skyreach Founder Understanding]]
---
[[Using it to improve what already exists.|Skyreach Founder Improvement]]
---
[[Knowing when your understanding is still incomplete.|Skyreach Founder Humility]]<<set $returnPassage = passage()>>
The mist thins as you follow the remaining path.
Soft green light begins to gather through it.
A woman waits ahead.
She stands with a quiet steadiness that feels different from the others.
No imposing posture.
No theatrical presence.
Just certainty.
Long chestnut hair is loosely braided over one shoulder, and warm green-brown eyes follow you as you approach.
Her robes are practical, embroidered with subtle patterns of leaves, roots, and protective runes.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You notice who gets left behind. </div></div>
Her voice is gentle, but there is nothing uncertain about it.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> When others rush toward the problem, you look at who might be hurt by it.<br> Who needs help. Who will still be standing when everything else is over. </div></div>
She steps closer.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That doesn't make you weak.<br> Patience is not surrender, and kindness is not the same thing as softness. </div></div>
Her expression becomes slightly more serious.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> But there is danger in carrying too much for other people.<br> Eventually, even the strongest back can break. </div></div>
The green light around you deepens.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren would ask you to become someone others can rely upon.<br> Without forgetting that you are allowed to rely on them too. </div></div>
She extends one hand toward you.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What does strength mean to you? </div></div>
[[Being someone others can depend on.|Mossgren Founder Dependability]]
---
[[Enduring whatever happens without giving up.|Mossgren Founder Endurance]]
---
[[Protecting the people who matter to me.|Mossgren Founder Protection]]
---
[[Knowing when to accept help instead of carrying everything alone.|Mossgren Founder Trust]]<<set $returnPassage = passage()>>
You turn toward the path filled with warm orange light.
The other path remains beside you for a moment.
Waiting.
Then, as you take your first step toward Emberfall, it begins to fade.
The mist closes over it.
The figure at its end disappears.
Your choice has been made.
Orange light grows stronger with every step.
Ahead, the remaining figure becomes clearer.
A broad-shouldered man waits for you, dark red-brown hair framing a face marked by age, experience, and an unmistakable confidence.
Old burn scars run across one of his hands.
He watches you approach with the faintest hint of a smile.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Two paths opened to you.<br> Yet you chose mine. </div></div>
His gaze moves over you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Interesting.<br> The Rings saw enough in you to hesitate. You didn't. </div></div>
He steps closer.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Whatever else you may be, when given the choice, you chose action.<br> Conviction. The willingness to commit yourself and accept what follows. </div></div>
The orange light around him burns brighter.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall can make something of that.<br> Provided you learn the difference between courage and simply refusing to back down. </div></div>
He extends his scarred hand toward you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What matters more to you? </div></div>
[[Having the courage to act when it matters.|Emberfall Founder Courage]]
---
[[Becoming strong enough that hesitation is unnecessary.|Emberfall Founder Strength]]
---
[[Proving that I can handle whatever comes next.|Emberfall Founder Prove]]
---
[[Knowing when not to act at all.|Emberfall Founder Restraint]]<<set $returnPassage = passage()>>
You turn toward the path filled with deep violet light.
For a moment, the other path remains beside you.
Waiting.
Then, as you step toward Nightbloom, it begins to disappear beneath the mist.
The figure at its end fades with it.
Your choice has been made.
Violet light gathers around you as you continue forward.
The remaining figure slowly comes into focus.
A tall woman waits at the end of the path.
Long black hair falls around her shoulders, faint strands of silver catching the light.
Her dark violet robes seem almost to blend into the mist around her.
Her eyes are already fixed on you.
Curious.
Assessing.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Two paths welcomed you.<br> Yet curiosity brought you to mine. </div></div>
A faint smile touches her expression.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The Rings found more than one answer in you.<br> I suspect you found that more interesting than troubling. </div></div>
She steps closer.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You were given certainty and chose the path that promised more questions. </div></div>
Her gaze sharpens slightly.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom can make use of that.<br> Provided you remember that discovering an answer does not always mean you will like it. </div></div>
The violet light around you deepens.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Tell me, then.<br> What do you seek when you look into the unknown? </div></div>
[[Understanding. Even dangerous truths are better than ignorance.|Nightbloom Founder Understanding]]
---
[[Power. Knowledge matters most when it can be used.|Nightbloom Founder Power]]
---
[[Possibility. I want to know what others haven't thought to ask.|Nightbloom Founder Possibility]]
---
[[Certainty. I want enough knowledge that nothing catches me unprepared.|Nightbloom Founder Certainty]]<<set $returnPassage = passage()>>
You turn toward the path filled with pale cyan light.
The other path remains visible for a few seconds longer.
Then, as you step toward Skyreach, the mist rolls across it.
The figure waiting there disappears.
Your choice has been made.
Cyan light gathers around you as the remaining path sharpens beneath your feet.
Ahead, a lean man waits in immaculate robes.
Pale blond-grey hair frames a composed face, and several thin metallic instruments drift silently around him in precise, measured patterns.
His sharp blue eyes settle on you immediately.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Two paths answered you.<br> You chose mine. </div></div>
One of the instruments beside him slowly turns.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The Rings found enough contradiction in you to leave the decision unresolved.<br> You preferred to resolve it yourself. </div></div>
There is the faintest hint of approval in his expression.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That tells me something already.<br> You value choice, but not indecision. Thought, but not paralysis. </div></div>
The instruments around him come to a stop.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach would expect you to sharpen that instinct.<br> To understand before you act, and to act once understanding is enough. </div></div>
The cyan light surrounding him grows brighter.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What makes knowledge worth having? </div></div>
[[Being able to use it well.|Skyreach Founder Application]]
---
[[Understanding something completely.|Skyreach Founder Understanding]]
---
[[Using it to improve what already exists.|Skyreach Founder Improvement]]
---
[[Knowing when your understanding is still incomplete.|Skyreach Founder Humility]]<<set $returnPassage = passage()>>
You turn toward the path filled with soft green light.
The other path remains beside you for a few moments.
Then, as you step toward Mossgren, mist rolls across it.
The figure waiting at its end fades from sight.
Your choice has been made.
Green light gathers around you as you continue forward.
The remaining figure slowly becomes clearer.
A sturdy woman waits ahead, long chestnut hair loosely braided over one shoulder.
Her robes are practical, embroidered with leaves, roots, and subtle protective runes.
Her warm green-brown eyes settle on you as you approach.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Two paths opened to you.<br> You chose this one. </div></div>
There is no judgement in her voice.
Only quiet interest.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The Rings saw more than one kind of strength in you.<br> Enough that they would not make the choice themselves. </div></div>
She steps a little closer.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Yet when the decision became yours, you chose the path built on patience, loyalty, and responsibility. </div></div>
Her expression softens slightly.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren can make something worthwhile of that.<br> Provided you remember that carrying others does not mean carrying everything alone. </div></div>
The green light around her deepens.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So tell me.<br> What does strength mean to you? </div></div>
[[Being someone others can depend on.|Mossgren Founder Dependability]]
---
[[Enduring whatever happens without giving up.|Mossgren Founder Endurance]]
---
[[Protecting the people who matter to me.|Mossgren Founder Protection]]
---
[[Knowing when to accept help instead of carrying everything alone.|Mossgren Founder Trust]]<<set $returnPassage = passage()>>
You tell him that having the courage to act when it matters is what matters most.
Alaric's expression sharpens with approval.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good.<br> Courage isn't about being fearless. </div></div>
He glances toward the orange light surrounding the path.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Fear is useful.<br> It tells you something matters. What matters more is whether you let it decide for you. </div></div>
He looks back to you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You'll make mistakes.<br> Everyone who acts eventually does. </div></div>
A faint grin appears.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just make sure they're your mistakes, made for reasons you can stand behind. </div></div>
The orange light around you grows brighter.
Alaric gives you a firm nod.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall will suit you. </div></div>
[[Continue|Emberfall Selection]]
<<set $playerValue = "Courage">><<set $returnPassage = passage()>>
You tell him that becoming strong enough that hesitation is unnecessary matters most to you.
Alaric's eyes narrow slightly.
Not with disapproval.
With interest.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Strength. </div></div>
He lets the word sit between you.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Useful.<br> Dangerous, if you start believing strength means never needing anyone else. </div></div>
The orange light around the path flickers across the scars on his hand.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Real strength gives you choices.<br> It lets you act because you can, not because you're desperate enough to try. </div></div>
A faint grin appears.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just don't become so obsessed with becoming stronger that you forget what you wanted the strength for. </div></div>
The orange glow around you intensifies.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall will give you plenty of opportunities to find out. </div></div>
[[Continue|Emberfall Selection]]
<<set $playerValue = "Strength">><<set $returnPassage = passage()>>
You tell him that proving you can handle whatever comes next matters most to you.
Alaric studies you for a moment.
Then he gives a short, approving laugh.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There it is.<br> Pride. </div></div>
There is no mockery in the word.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Not always a bad thing.<br> Wanting to prove yourself can push you further than fear ever will. </div></div>
His expression hardens slightly.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> But if every challenge becomes something you need to win, eventually you'll start choosing battles simply because they're there. </div></div>
The orange light around you burns brighter.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Prove yourself when it matters.<br> Not because you need everyone watching to believe you're capable. </div></div>
A faint grin returns.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall should give you no shortage of opportunities. </div></div>
[[Continue|Emberfall Selection]]
<<set $playerValue = "Proving Yourself">><<set $returnPassage = passage()>>
You tell him that knowing when not to act matters most to you.
Alaric goes quiet.
For a moment, his expression is difficult to read.
Then one corner of his mouth lifts.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Better answer than most people expect from Emberfall. </div></div>
He folds his arms.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Anyone can rush forward.<br> It takes more discipline to stop yourself when every part of you wants to act. </div></div>
The orange light around you steadies.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Restraint only means something when action was genuinely an option. </div></div>
His gaze sharpens.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Learn when to hold back.<br> Just don't let caution become an excuse for doing nothing when something needs to be done. </div></div>
He gives you a firm nod.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall has room for more than one kind of courage. </div></div>
[[Continue|Emberfall Selection]]
<<set $playerValue = "Restraint">><<set $returnPassage = passage()>>
You tell her that understanding matters most to you.
Seraphine's expression softens by the smallest amount.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good.<br> Ignorance has never made anything less dangerous. </div></div>
She steps slowly around you.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> People often fear answers because answers demand something of them.<br> A decision. A change. Responsibility. </div></div>
The violet light around you deepens.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you seek truth, be prepared for it to be inconvenient. </div></div>
A faint smile appears.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom will give you plenty to understand.<br> Whether you like what you learn is another matter. </div></div>
[[Continue|Nightbloom Selection]]
<<set $playerValue = "Understanding">><<set $returnPassage = passage()>>
You tell her that knowledge matters most when it can be used.
Seraphine studies you for a long moment.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Power, then. </div></div>
There is no judgement in her voice.
Only interest.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Knowledge can change the world.<br> But only if someone is willing to do something with it. </div></div>
The violet light around you shifts slowly through the mist.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just remember that power changes the person holding it as easily as it changes everything else. </div></div>
A faint smile touches her expression.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom will show you plenty worth using.<br> What you choose to do with it will be yours to answer for. </div></div>
[[Continue|Nightbloom Selection]]
<<set $playerValue = "Power">><<set $returnPassage = passage()>>
You tell her that possibility matters most to you.
That you want to know what others haven't thought to ask.
Seraphine's eyes brighten with unmistakable interest.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Better. </div></div>
She tilts her head slightly.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The easiest questions are usually the ones everyone has already agreed are worth asking. </div></div>
Violet light curls through the mist around you.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Discovery begins when someone notices the question everyone else ignored. </div></div>
Her expression becomes more serious.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> But possibility is endless.<br> Your time is not. Learn which questions deserve to be followed. </div></div>
A faint smile returns.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom should keep you occupied. </div></div>
[[Continue|Nightbloom Selection]]
<<set $playerValue = "Possibility">><<set $returnPassage = passage()>>
You tell her that certainty matters most to you.
That you want enough knowledge that nothing catches you unprepared.
Seraphine watches you in silence for a moment.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sensible.<br> Impossible, but sensible. </div></div>
A faint trace of amusement touches her expression.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There will always be something you did not know.<br> Something you failed to anticipate. Something waiting beyond the edge of what you understand. </div></div>
The violet light around you deepens.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Preparation matters.<br> But certainty can become its own kind of illusion if you trust it too much. </div></div>
She gives you a small, knowing smile.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Learn everything you can.<br> Then learn how to move when knowledge fails you. </div></div>
[[Continue|Nightbloom Selection]]
<<set $playerValue = "Certainty">><<set $returnPassage = passage()>>
You tell him that being able to use what you know well matters most to you.
Cassian gives a small, approving nod.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good.<br> Knowledge without application is unfinished work. </div></div>
The pale cyan light around him shifts across the floating instruments at his side.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Understanding matters.<br> But mastery is proven by what you can actually do with that understanding. </div></div>
He studies you carefully.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The danger is mistaking competence for completion.<br> There is always something to refine. </div></div>
The cyan glow around you grows brighter.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach will expect more than knowing the answer.<br> It will expect you to prove you can use it. </div></div>
[[Continue|Skyreach Selection]]
<<set $playerValue = "Application">><<set $returnPassage = passage()>>
You tell him that understanding something completely matters most to you.
Cassian's gaze sharpens with immediate interest.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Completely is an ambitious word. </div></div>
One of the thin metallic instruments beside him turns slowly in the air.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Most mistakes begin with someone deciding they understand enough. </div></div>
The pale cyan light around you steadies.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There is value in refusing easy answers.<br> In testing an idea until there is nothing left to doubt. </div></div>
His expression becomes more measured.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just remember that perfection can become another form of hesitation.<br> At some point, understanding has to become action. </div></div>
He gives you a slight nod.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach will give you plenty worth questioning. </div></div>
[[Continue|Skyreach Selection]]
<<set $playerValue = "Understanding">><<set $returnPassage = passage()>>
You tell him that using knowledge to improve what already exists matters most to you.
Cassian considers the answer carefully.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Improvement. </div></div>
One of the metallic instruments beside him shifts, rotating with perfect precision.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> A useful instinct.<br> Very little is perfect simply because it already works. </div></div>
The cyan light around you brightens slightly.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Refinement is often less dramatic than invention.<br> It is also what turns something clever into something reliable. </div></div>
His expression sharpens.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just be careful not to change things simply because you can.<br> Improvement requires knowing what should remain untouched. </div></div>
He gives you a measured nod.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach should give you plenty worth refining. </div></div>
[[Continue|Skyreach Selection]]
<<set $playerValue = "Improvement">><<set $returnPassage = passage()>>
You tell him that knowing when your understanding is still incomplete matters most to you.
Cassian is silent for a moment.
Then he gives a slow, approving nod.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Humility. </div></div>
The word carries no softness.
Only respect.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> One of the hardest things to admit is that your answer may still be wrong. </div></div>
The cyan light around you grows steadier.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Certainty is comfortable.<br> Understanding rarely is. </div></div>
His gaze remains fixed on you.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Never be ashamed to revise what you believe when the evidence demands it.<br> That is not weakness. It is discipline. </div></div>
A faint smile touches his expression.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach will test that more often than you expect. </div></div>
[[Continue|Skyreach Selection]]
<<set $playerValue = "Humility">><<set $returnPassage = passage()>>
You tell her that being someone others can depend on matters most to you.
Elowen's expression warms.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Dependability. </div></div>
She gives a small nod.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It is easy to be impressive when everything is going well.<br> Much harder to be the person others can still trust when it isn't. </div></div>
The soft green light around you deepens.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Reliability rarely earns the loudest praise.<br> But it is what people remember when things begin to fall apart. </div></div>
Her gaze settles on you more seriously.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just remember that being dependable does not mean saying yes to everything asked of you. </div></div>
A faint smile returns.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren will teach you the difference. </div></div>
[[Continue|Mossgren Selection]]
<<set $playerValue = "Dependability">><<set $returnPassage = passage()>>
You tell her that enduring whatever happens without giving up matters most to you.
Elowen studies you quietly.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Endurance. </div></div>
The green light around you settles into a steady glow.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There is strength in continuing when something becomes difficult.<br> More than most people realise. </div></div>
Her expression becomes more serious.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> But endurance should never become an excuse to remain somewhere that is destroying you. </div></div>
The mist shifts softly around her feet.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Knowing what is worth surviving is just as important as knowing that you can. </div></div>
She gives you a small, approving nod.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren will give you plenty of chances to learn the difference. </div></div>
[[Continue|Mossgren Selection]]
<<set $playerValue = "Endurance">><<set $returnPassage = passage()>>
You tell her that protecting the people who matter to you matters most.
Elowen's expression softens.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Protection. </div></div>
She lets the word rest between you for a moment.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There is nothing weak about caring enough to stand between someone and harm. </div></div>
The green light around you grows warmer.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> But protection can become control if you decide that caring for someone means choosing for them. </div></div>
Her gaze stays steady on yours.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Learn when to shield someone.<br> And when to trust them to stand beside you. </div></div>
A small smile appears.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren understands that kind of strength well. </div></div>
[[Continue|Mossgren Selection]]
<<set $playerValue = "Protection">><<set $returnPassage = passage()>>
You tell her that knowing when to accept help instead of carrying everything alone matters most to you.
Elowen's expression becomes quietly approving.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Trust. </div></div>
She nods once.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Harder than it sounds.<br> Especially for people who are used to being the one others rely on. </div></div>
The green light around you steadies.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Strength is not diminished by sharing the weight.<br> Sometimes that is what allows you to keep carrying it at all. </div></div>
Her gaze remains warm but firm.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Learn who deserves that trust.<br> And do not mistake independence for isolation. </div></div>
A faint smile appears.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren will suit you well. </div></div>
[[Continue|Mossgren Selection]]
<<set $playerValue = "Trust">><<set $returnPassage = passage()>>
The orange light surrounding Alaric begins to intensify.
His figure becomes harder to make out through it.
<div class="dialogueBox"> <div class="speakerName">Alaric Pyre</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Then go.<br> You've kept them waiting long enough. </div></div>
A faint grin is the last thing you see.
Then the Reflection disappears.
Sound returns all at once.
The murmur of hundreds of students.
The faint scrape of movement across stone.
Your feet are still planted exactly where they were in the centre of the Grand Assembly Hall.
The ring surrounding you slows.
Professor Voss watches it closely.
For a moment, nothing happens.
Then orange light races through the runes carved across its surface.
The reactive seams of your robes flare through several colours before finally settling into a deep, unmistakable orange.
A few voices rise from the surrounding tiers.
Professor Voss looks from the ring to your robes.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall it is. </div></div>
The Emberfall recess brightens in answer.
Applause breaks out from that section of the hall as the ring rises away from you and begins returning to the formation overhead.
[[Continue|House Selection Aftermath]]<<set $returnPassage = passage()>>
The violet light surrounding Seraphine begins to deepen.
Her figure slowly disappears into the mist.
<div class="dialogueBox"> <div class="speakerName">Seraphine Nocturne</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Go, then.<br> There is considerably more waiting for you than answers. </div></div>
Her faint smile is the last thing you see.
Then the Reflection disappears.
Sound rushes back around you.
The murmur of the Assembly Hall.
The scrape of shoes against stone.
The distant movement of hundreds of students watching from the surrounding tiers.
You haven't moved.
The ring still surrounds you.
Professor Voss watches it closely.
For a moment, the runes remain pale.
Then violet light pours through them.
The reactive seams of your robes flash through the academy colours before settling into a deep, unmistakable purple.
The Nightbloom section begins to stir.
Professor Voss glances toward your robes.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom it is. </div></div>
The Nightbloom recess brightens in answer.
Applause rises from that side of the hall as the ring lifts away from you and begins returning to the formation overhead.
[[Continue|House Selection Aftermath]]<<set $returnPassage = passage()>>
The pale cyan light surrounding Cassian begins to brighten.
The metallic instruments drifting beside him slow, then fade one by one into the mist.
<div class="dialogueBox"> <div class="speakerName">Cassian Aerwyck</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That will do.<br> The rest is for you to discover. </div></div>
He gives you one final measured nod.
Then the Reflection disappears.
Sound returns around you.
The low murmur of the Assembly Hall.
The shifting of students across the surrounding tiers.
The faint hum of the Rings overhead.
You are still standing in the centre of the hall.
The ring around you begins to slow.
Professor Voss watches the runes carefully.
For a moment, they remain colourless.
Then pale cyan light spreads through them.
The reactive seams of your robes flicker through several colours before settling into a clear, steady cyan.
The Skyreach section begins to stir.
Professor Voss glances toward your robes.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach it is. </div></div>
The Skyreach recess brightens in answer.
Applause rises from that section of the hall as the ring lifts away from you and returns toward the rotating formation overhead.
[[Continue|House Selection Aftermath]]<<set $returnPassage = passage()>>
The soft green light surrounding Elowen begins to brighten.
The mist curls around her feet and slowly rises.
<div class="dialogueBox"> <div class="speakerName">Elowen Briar</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Go on, then.<br> You've got a great deal ahead of you. </div></div>
Her warm smile is the last thing you see.
Then the Reflection disappears.
The Assembly Hall returns around you.
The murmur of students.
The movement across the circular tiers.
The faint metallic hum of the Rings above.
You are still standing exactly where you were.
The ring surrounding you slows.
Professor Voss watches as the runes begin to glow.
Soft green light spreads across their surface.
The reactive seams of your robes flicker through the academy colours before finally settling into a deep, steady green.
The Mossgren section begins to stir.
Professor Voss glances toward your robes.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren it is. </div></div>
The Mossgren recess brightens in answer.
Applause rises from that section of the hall as the ring lifts away from you and rejoins the formation overhead.
[[Continue|House Selection Aftermath]]<<set $returnPassage = passage()>> <<if previous() is "Emberfall Selection">>
<<set $house = "Emberfall">>
<<elseif previous() is "Nightbloom Selection">>
<<set $house = "Nightbloom">>
<<elseif previous() is "Skyreach Selection">>
<<set $house = "Skyreach">>
<<elseif previous() is "Mossgren Selection">>
<<set $house = "Mossgren">>
<</if>>
<div id="selectionSmoke"></div>
<<script>>
setTimeout(function () {
$("#selectionSmoke").addClass("fadeSmoke");
}, 200);
setTimeout(function () {
$("#selectionSmoke").remove();
}, 2200);
<</script>>
The applause continues as you step away from the centre of the hall.
Above you, the Founders' Rings settle back into their slow rotation.
Whatever happened inside the Reflection, out here barely any time seems to have passed.
Professor Voss is already looking toward the remaining unsorted students.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Off you go.<br> Preferably before your House begins celebrating without you. </div></div>
A few students laugh.
You make your way toward the section marked by your new House colours, the seams of your robes now holding steady instead of cycling between them.
<<if $house is "Nightbloom">>
Alexis shifts along the tier to make room as you approach.
Her grin makes it clear she's pleased with the result.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Well.<br> That makes things easier. </div></div>
<<elseif $house is "Emberfall">>
Sebastian watches you approach from among the Emberfall students.
His eyes briefly drop to the orange seams of your robes before returning to you.
A faint smirk appears.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Interesting. </div></div>
He shifts just enough to leave space nearby.
<<else>>
As you settle among your new House, you catch Alexis looking across the hall toward you.
She gives you a small smile.
Sebastian notices too.
His expression remains difficult to read before his attention returns to the centre of the chamber.
<</if>>
<<print $petName>> soon finds you again, settling close by as the ceremony continues.
For the first time since arriving at Hexmoor, the colours on your robes are no longer waiting to decide what you are.
You belong to **<<print $house>>**.
[[Continue|House Selection Continues]]
<<set $returnPassage = passage()>>
For a while, you barely pay attention to the next name Professor Voss calls.
Your eyes keep dropping to the coloured seams of your robes.
They aren't changing anymore.
No orange fading into violet.
No cyan giving way to green.
Just the colour of **<<print $house>>**.
After everything that happened inside the Reflection, the simple permanence of it feels strangely significant.
A House.
Your House.
The founder's words still linger in the back of your mind.
So does the answer you gave.
Around you, the ceremony keeps moving.
Another name is called.
A Ring descends.
A nervous-looking boy emerges into Skyreach.
A woman gripping the sides of her robes returns beneath a wash of green and hurries toward Mossgren with an obvious look of relief.
The next student becomes Emberfall almost immediately.
Then Nightbloom.
Professor Voss barely pauses between them.
<div class="dialogueBox"> <div class="speakerName">Professor Mara Voss</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Congratulations.<br> Yes, your robes have changed colour.<br> Please continue walking. </div></div>
A ripple of laughter moves through the hall.
You finally manage to pull your attention away from your own sleeves.
Across the tiers, you find Alexis.
Her eyes are already on you.
<<if $house is $alexisHouse>>
The violet seams of her robes match your own.
Her face breaks into an immediate grin.
<<else>>
She glances pointedly at your new House colours before giving you a small, approving nod.
<</if>>
[[Continue|House Selection Continues Alexis]]<<set $returnPassage = passage()>>
A few more students pass beneath the Rings while the Assembly Hall gradually settles.
Eventually, Alexis makes her way back toward you and slips into the open space beside you.
<<if $house is $alexisHouse>>
She looks down at your robes, then at her own.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Well.<br> Looks like you're stuck with me. </div></div>
Her grin makes it clear she isn't especially upset about that.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Same House on the first day.<br> Elliot is going to find that far too funny. </div></div>
There is something reassuring about seeing the same violet running through both sets of robes.
Whatever Nightbloom actually means for the next four years, at least you aren't walking into it entirely alone.
<<else>>
Alexis gives your robes another quick look.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> So.<br> Not Nightbloom. </div></div>
She considers this for all of half a second.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I suppose I can forgive you. </div></div>
A small smile gives away the joke.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You'll just have to give me something to complain about when our Houses start pretending they're better than each other. </div></div>
<</if>>
<<print $petName>> settles close again as another student leaves the central platform.
Only a handful remain now.
One by one, the Rings descend.
Colours settle.
Students disappear into their new sections.
Then Professor Voss lowers the list in her hands.
No one remains waiting beneath the Founders' Rings.
Above the central platform, the great metal circles rise together and return to their slow, interlocking rotation.
Around the Assembly Hall, every first-year now wears permanent House colours.
At the centre of the chamber, Headmaster Thornwell steps forward again.
The hall gradually falls quiet.
[[Continue|House Selection Closing]]<<set $returnPassage = passage()>>
Headmaster Thornwell waits until the last whispers disappear.
His gaze moves slowly across the four sections of newly sorted first-years.
For the first time, everyone around you wears permanent House colours.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> And with that, you are no longer simply new arrivals to Hexmoor. </div></div>
He allows himself a small smile.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You are Emberfall, Nightbloom, Skyreach and Mossgren.<br> Though I would encourage you not to make those distinctions more important than they need to be. </div></div>
A few students glance toward the other House sections.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your House will give you a home here.<br> It will not decide who you may speak to, study beside, disagree with, befriend, or inevitably embarrass yourself in front of. </div></div>
That earns a broader laugh from the hall.
Even Professor Voss looks faintly amused.
Thornwell waits for the noise to settle again.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your House representatives will now take you to your residences.<br> You'll be shown your rooms, communal spaces, and the parts of the academy you will need most often. </div></div>
His expression becomes a little more serious.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Take the time to settle in.<br> Hexmoor will begin demanding considerably more of you soon enough. </div></div>
He steps back from the centre of the platform.
<div class="dialogueBox"> <div class="speakerName">Headmaster Aldric Thornwell</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome to Hexmoor. </div></div>
Applause breaks across the Assembly Hall.
This time it isn't for any particular student.
It's for all of you.
Around the chamber, older students and staff begin moving toward the four House sections.
Alexis shifts beside you as the rows start emptying.
<<if $house is $alexisHouse>>
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Guess we're heading the same way. </div></div>
<<else>>
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Looks like this is where we split up for a bit. </div></div>
<</if>>
<<print $petName>> rises with you.
Around you, the Assembly Hall dissolves into movement as four groups begin forming beneath their House colours.
For the first time, you move to join yours.
[[Continue|House Residence Departure]]<<set $returnPassage = passage()>>
<<if $house is "Emberfall">>
<<goto "Emberfall Prefect Introduction">>
<<elseif $house is "Nightbloom">>
<<goto "Nightbloom Prefect Introduction">>
<<elseif $house is "Skyreach">>
<<goto "Skyreach Prefect Introduction">>
<<elseif $house is "Mossgren">>
<<goto "Mossgren Prefect Introduction">>
<</if>><<set $returnPassage = passage()>>
The Emberfall first-years gather beneath the orange-lit arch at the edge of the Grand Assembly Hall.
There is already more noise here than in most of the other groups.
A few students compare robes.
Someone further back is loudly insisting they knew exactly where they would end up.
Sebastian stands among the crowd looking considerably less surprised than most.
Before the conversations can spread much further, a woman in Emberfall colours steps onto the lower tier in front of you.
She is around your age compared to most of the staff you've met, though clearly an older student.
Strongly built.
Dark auburn hair tied loosely back.
Her sleeves are already pushed slightly up her arms.
She looks across the gathered first-years.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Right.<br> Emberfall first-years. Eyes this way. </div></div>
The conversations gradually die down.
She waits for the last one to stop.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Much better.<br> I'm Rhea Calder. Fourth Year, and unfortunately for all of us, your House Prefect. </div></div>
A few students laugh.
Rhea folds her arms.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> My job is fairly simple.<br> I make sure you know where you're going, stop you breaking anything important, and try to keep you alive long enough to become somebody else's problem. </div></div>
That gets a louder laugh.
Her grin suggests she is only partly joking.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'll take you to the Emberfall residence first.<br> You'll see the common room, find your bedrooms, and I'll cover the important rules on the way. </div></div>
Her eyes move across the group.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you have questions, ask them.<br> If you're lost, say something.<br> And if you decide you already know better than everyone here, at least wait until tomorrow. </div></div>
Sebastian's expression shifts by the smallest amount.
You aren't entirely sure whether he is amused or offended.
Rhea turns toward one of the exits leading from the Assembly Hall.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall. With me. </div></div>
The group begins moving.
<<print $petName>> stays close as you follow.
[[Continue|Emberfall Residence Walk]]
<<if $rheaCalderRelation is undefined>>
<<set $rheaCalderRelation = "House Prefect">>
<</if>>
<<if $rheaCalderGenitals is undefined>>
<<set $rheaCalderGenitals = "Unknown">>
<</if>>
<<run addRelationship("Rhea Calder", 22, "human")>><<set $returnPassage = passage()>>
The Nightbloom first-years gather beneath the violet-lit arch at the edge of the Grand Assembly Hall.
The group feels quieter than Emberfall's had looked from across the chamber.
Not silent.
Just more watchful.
Some students are already studying the architecture around them.
Others whisper about the Founders' Rings.
Alexis remains nearby, the violet seams of her robes matching the glow above.
A young man in Nightbloom colours steps down toward the front of the group.
He is slim, dark-haired, and wears several small silver rings across his fingers.
He says nothing at first.
He simply waits.
Gradually, the surrounding conversations die away.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Interesting.<br> I was curious how long that would take. </div></div>
A few students smile.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Lucian Wren. Fourth Year.<br> I'm your House Prefect. </div></div>
Lucian's gaze moves slowly across the gathered first-years.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'll show you the Nightbloom residence, your rooms, and the parts of this side of Hexmoor you'll need most often. </div></div>
He adjusts one of the rings on his hand.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you have questions, ask them.<br> If you don't have questions yet, I suspect Nightbloom will fix that fairly quickly. </div></div>
Alexis gives you a small sideways smile.
Lucian turns toward one of the exits from the hall.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom. Follow me. </div></div>
The group begins moving.
<<print $petName>> stays close as you leave the Grand Assembly Hall with Alexis beside you.
[[Continue|Nightbloom Residence Walk]]
<<if $lucianWrenRelation is undefined>>
<<set $lucianWrenRelation = "House Prefect">>
<</if>>
<<if $lucianWrenGenitals is undefined>>
<<set $lucianWrenGenitals = "Unknown">>
<</if>>
<<run addRelationship("Lucian Wren", 22, "human")>><<set $returnPassage = passage()>>
The Skyreach first-years gather beneath the pale cyan arch at the edge of the Grand Assembly Hall.
The group is noticeably orderly.
Some students are already comparing schedules.
Others quietly discuss the Founders' Reflection while keeping half an eye on the staff moving around the chamber.
A woman in immaculate Skyreach robes steps toward the front.
Her pale blonde hair is tied back neatly.
A stack of parchment rests beneath one arm.
She waits until the group settles.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach first-years.<br> Your attention, please. </div></div>
The remaining conversations stop almost immediately.
She gives a small, satisfied nod.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Helena Ward. Fourth Year.<br> I'm your House Prefect. </div></div>
Helena looks across the group as though quietly confirming everyone is where they should be.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'll be taking you to the Skyreach residence.<br> On the way, I'll point out the areas you'll need most often and explain the essentials. </div></div>
She adjusts the parchment beneath her arm.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You are not expected to remember the entire academy today.<br> You are expected to pay enough attention that you don't make the same mistake repeatedly. </div></div>
A few first-years exchange amused looks.
Helena's expression barely changes.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Questions are encouraged.<br> Questions whose answers I gave thirty seconds earlier are slightly less encouraged. </div></div>
That earns a quiet laugh.
She turns toward one of the exits from the hall.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach. This way. </div></div>
The group begins moving.
<<print $petName>> follows close beside you as you leave the Grand Assembly Hall.
[[Continue|Skyreach Residence Walk]]
<<if $helenaWardRelation is undefined>>
<<set $helenaWardRelation = "House Prefect">>
<</if>>
<<if $helenaWardGenitals is undefined>>
<<set $helenaWardGenitals = "Unknown">>
<</if>>
<<run addRelationship("Helena Ward", 23, "human")>><<set $returnPassage = passage()>>
The Mossgren first-years gather beneath the green-lit arch at the edge of the Grand Assembly Hall.
The group settles more gradually than some of the others.
There is less posturing here.
More quiet conversation.
A broad-shouldered young man in Mossgren colours steps forward from the edge of the section.
His robes are worn neatly enough, though with far less formality than most of the older students you've seen.
He lifts one hand.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren first-years.<br> Over here, please. </div></div>
The remaining conversations fade.
His expression is relaxed.
<div class="dialogueBox"> <div class="speakerName">???</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Jonah Reed. Fourth Year.<br> I'm your House Prefect. </div></div>
Jonah looks across the group.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I'll take you to the Mossgren residence, show you where everything is, and hopefully answer enough questions that nobody spends tonight sleeping in the wrong corridor. </div></div>
A few students laugh.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you're unsure about something, ask.<br> Nobody expects you to know the place yet. </div></div>
He glances toward the exit.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come on.<br> Mossgren's this way. </div></div>
The group begins moving.
<<print $petName>> stays close as you follow.
[[Continue|Mossgren Residence Walk]]
<<if $jonahReedRelation is undefined>>
<<set $jonahReedRelation = "House Prefect">>
<</if>>
<<if $jonahReedGenitals is undefined>>
<<set $jonahReedGenitals = "Unknown">>
<</if>>
<<run addRelationship("Jonah Reed", 22, "human")>><div style="text-align:center;">
<h2>Rhea Calder</h2>
</div>
Age: 22
House: Emberfall
Year: Fourth Year
Role: House Prefect
Pronouns: She/Her/Hers
Relation to you: <<print $rheaCalderRelation>>
Height & Build: 5'9"; strong, athletic build with the posture of someone naturally comfortable taking charge
Face: Strong, confident features with warm brown eyes and an expressive look that rarely hides what she is thinking
Hair: Thick dark auburn hair, around shoulder length and usually tied back loosely when training or working
Skin: Lightly tanned complexion with a few faint marks and scars across her hands from years of practical magic
Expression: Usually confident and slightly amused, often wearing the look of someone already expecting a challenge
Clothing: Emberfall student robes with prominent orange detailing; usually worn slightly less formally than intended, with sleeves often rolled and the collar rarely sitting perfectly straight
Chest & Build: Athletic chest and shoulders, toned through regular duelling and practical magical training
Waist & Figure: Strong, balanced figure with a defined waist and powerful legs
Arse: Firm and athletic, proportional to her build
Genitals: <<print $rheaCalderGenitals>>
<<link "Return">><<goto Relationships>><</link>><div style="text-align:center;">
<h2>Lucian Wren</h2>
</div>
Age: 22
House: Nightbloom
Year: Fourth Year
Role: House Prefect
Pronouns: He/Him/His
Relation to you: <<print $lucianWrenRelation>>
Height & Build: 5'11"; slim build with a relaxed posture and an almost effortless way of carrying himself
Face: Refined, slightly angular features with dark hazel eyes that rarely seem to stop observing the people around him
Hair: Dark brown curls, worn slightly longer on top and usually left loosely styled rather than carefully arranged
Skin: Fair complexion with a warm undertone
Expression: Often mildly amused or thoughtful, with the look of someone constantly considering a question nobody else has noticed yet
Clothing: Nightbloom student robes with deep violet detailing; usually neat but personalised with several small silver rings, charms and subtle magical trinkets
Chest & Build: Lean chest and shoulders, lightly toned rather than muscular
Waist & Figure: Slim waist with a narrow, balanced frame
Arse: Firm and proportional, understated beneath his robes
Genitals: <<print $lucianWrenGenitals>>
<<link "Return">><<goto Relationships>><</link>><div style="text-align:center;">
<h2>Helena Ward</h2>
</div>
Age: 23
House: Skyreach
Year: Fourth Year
Role: House Prefect
Pronouns: She/Her/Hers
Relation to you: <<print $helenaWardRelation>>
Height & Build: 5'8"; lean and well-conditioned with an upright, precise posture
Face: Refined features with sharp blue-grey eyes and an attentive, analytical gaze
Hair: Pale blonde hair, worn around shoulder length and usually tied back neatly while studying or working
Skin: Fair complexion with cool undertones
Expression: Usually composed and focused, with subtle expressions that make approval or disappointment immediately obvious
Clothing: Immaculate Skyreach student robes with clean cyan detailing; usually perfectly arranged and accompanied by neatly organised notes, parchment or study materials
Breast Size: Moderate, proportional
Hips & Figure: Lean hourglass figure with a narrow waist and balanced proportions
Arse: Firm and proportional, understated beneath her robes
Genitals: <<print $helenaWardGenitals>>
<<link "Return">><<goto Relationships>><</link>><div style="text-align:center;">
<h2>Jonah Reed</h2>
</div>
Age: 22
House: Mossgren
Year: Fourth Year
Role: House Prefect
Pronouns: He/Him/His
Relation to you: <<print $jonahReedRelation>>
Height & Build: 6'1"; broad-shouldered and solidly built, with a relaxed posture that makes him seem approachable despite his size
Face: Strong, friendly features with warm dark-brown eyes and a calm, attentive gaze
Hair: Dark brown, kept short and practical with a slight natural curl
Skin: Warm brown complexion with a healthy, outdoorsy appearance
Expression: Usually relaxed and approachable, though noticeably firmer when someone is being reckless or inconsiderate
Clothing: Mossgren student robes with deep green detailing; worn comfortably rather than formally, with the sleeves sometimes pushed back when working
Chest & Build: Broad chest and strong shoulders, naturally powerful without looking heavily muscular
Waist & Figure: Solid, balanced frame with a sturdy waist and strong legs
Arse: Firm and proportional, understated beneath his robes
Genitals: <<print $jonahReedGenitals>>
<<link "Return">><<goto Relationships>><</link>><<set $returnPassage = passage()>>
Rhea leads the Emberfall first-years out of the Grand Assembly Hall and into one of the academy's broader stone corridors.
The orange detailing on your robes seems brighter now beneath the warmer torchlight.
The group spreads out slightly as you walk.
Rhea keeps a steady pace at the front.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Emberfall's on the western side of the academy.<br> We're closer to the practice courtyards, duelling rooms and some of the older training spaces. </div></div>
That gets an approving murmur from several students.
Rhea glances back.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Before anyone gets excited, no, that does not mean you can challenge someone every time you're bored. </div></div>
A few disappointed expressions appear.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Organised duelling is fine.<br> Blasting holes through corridors because someone annoyed you is generally frowned upon. </div></div>
The corridor opens into a wide junction.
One direction leads toward a sunlit courtyard beyond a row of tall windows.
Another slopes downward beneath heavy stone arches.
Rhea takes the upper route.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You'll learn the shortcuts eventually.<br> For now, remember the bronze braziers. If you keep seeing those, you're probably heading toward Emberfall. </div></div>
You begin noticing them as she speaks.
Small wall-mounted braziers positioned between portraits and archways, each burning with a steady orange flame.
[[Continue|Emberfall Residence Walk Two]]<<set $returnPassage = passage()>>
The further you walk, the more Emberfall students you pass.
Their robes range from carefully arranged to looking like they were thrown on while running out the door.
A pair of older students move aside to let the first-years through.
One gives Rhea a knowing grin.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> House culture lesson one.<br> You're allowed to be competitive. You're even encouraged to be competitive. </div></div>
She points back at the group without slowing.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You're not encouraged to become unbearable about it. </div></div>
From nearby, Sebastian speaks up.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Is there an official measurement for unbearable? </div></div>
Rhea looks over her shoulder at him.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Yes.<br> If I start remembering your name for the wrong reasons, you've crossed it. </div></div>
Several students laugh.
Sebastian only smiles.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Good to know. </div></div>
As the group starts moving again, he falls into step closer to you.
His eyes briefly move to the orange seams of your robes.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I suppose we'll be seeing rather more of each other than expected. </div></div>
There is something almost pleased beneath the polished tone.
Almost.
<div class="dialogueBox"> <div class="speakerName">Sebastian Vane</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Could make things interesting. </div></div>
[[Continue|Emberfall Residence Arrival]]<<set $returnPassage = passage()>>
Before either of you can linger, Rhea calls from ahead.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Keep up, first-years. Residence is just ahead. </div></div>
The corridor bends.
Beyond it, the stonework begins to change.
Dark timber beams break up the walls.
The bronze braziers become larger and more frequent.
Orange light spills across the floor from somewhere ahead.
Then the corridor opens onto a broad set of heavy wooden doors marked with the Emberfall crest.
Even before they open, you can hear conversation from the other side.
Rhea stops in front of them and turns back toward the group.
For the first time since leaving the Assembly Hall, everyone bunches together again.
Rhea rests one hand against the door.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome home. </div></div>
[[Continue|Emberfall Residence]]<<set $returnPassage = passage()>>
Rhea pushes open the heavy doors.
Warm air immediately rolls out to meet you.
The Emberfall residence opens into a large, high-ceilinged common room built from dark stone and heavy timber.
A huge fireplace dominates the far wall, its flames burning considerably brighter than any ordinary fire should.
Deep red and burnt-orange sofas are arranged around it, mixed with heavy wooden tables already covered in books, abandoned mugs and half-finished games.
Emberfall banners hang between tall windows overlooking one of Hexmoor's western courtyards.
The room is busy.
Older students talk around the fire.
Two people argue enthusiastically over something written across a piece of parchment.
Someone near the windows is repeatedly trying to make a small metal disk hover while their friends offer increasingly unhelpful advice.
It feels less polished than much of Hexmoor.
More lived in.
Rhea steps aside and lets the first-years spread into the room.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is the Emberfall common room.<br> You'll probably spend more time here than you expect. </div></div>
She gestures toward several corridors branching away from it.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bedrooms are through there and upstairs.<br> Everyone gets their own room. Bathrooms and study spaces are shared. </div></div>
A few first-years immediately start looking toward the staircases.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your names are already on your doors, so there's no race.<br> Which I realise is disappointing news for some of you. </div></div>
A few people laugh.
Sebastian does not look particularly disappointed.
Rhea points toward another archway beside the fireplace.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Study room through there. Small practice room beyond it.<br> Practice room means controlled magic. Not experimental explosions. </div></div>
She pauses.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You'll understand why I'm specifying that eventually. </div></div>
That earns a few looks from the older students nearby.
One of them laughs.
You take another look around.
The permanent orange seams of your robes no longer feel quite as unfamiliar here.
For the next four years, this is part of home.
Rhea turns toward the staircase.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come on.<br> Let's get you lot to your rooms. </div></div>
[[Continue|Emberfall Bedroom]]<<set $returnPassage = passage()>>
Rhea leads the group upstairs, where the noise of the common room gradually fades behind you.
The upper corridor is quieter.
Heavy wooden doors line both sides, each marked with a small brass plaque.
Names are already engraved across them.
Students begin peeling away from the group as they find their rooms.
Rhea slows near the middle of the corridor.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your rooms are yours.<br> Keep them however you want, within reason. </div></div>
She gestures toward the doors.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bathrooms are shared at the end of each corridor.<br> If something in your room breaks, report it before trying to fix it with magic you learned five minutes ago. </div></div>
A few people glance at one another.
Rhea smirks.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Yes. That has happened before. </div></div>
You continue along the corridor until you spot your own name.
<<print $name>>
The brass plaque sits neatly against the dark wood.
Your room.
Rhea notices you stop.
<div class="dialogueBox"> <div class="speakerName">Rhea Calder</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There you are.<br> Get settled. I'll be downstairs if you need anything. </div></div>
She moves on with the remaining first-years.
You open the door.
The room beyond is simple but comfortable.
A single bed sits against one wall beneath a tall window.
There is a wooden desk, a wardrobe, several shelves, and a small chest at the foot of the bed.
Orange detailing runs subtly through the curtains and bedding, matching the permanent seams of your robes.
Your belongings have already been brought here.
<<print $petName>> moves inside ahead of you, immediately beginning to investigate the unfamiliar space.
You step in after them.
For the first time since arriving at Hexmoor, you have somewhere that actually feels like it belongs to you.
[[Continue|Emberfall Settling In]]<<set $returnPassage = passage()>>
You close the door behind you.
For a few seconds, the room is quiet.
No professors.
No ceremony.
No hundreds of students watching.
Just you and <<print $petName>>.
You set a few of your belongings down properly and take another look around.
The orange detailing is subtle, but now that your robes match it, the room feels strangely appropriate.
From somewhere beyond the door comes a burst of laughter from another first-year finding their room.
Farther downstairs, the Emberfall common room is already growing louder again.
<<print $petName>> eventually settles somewhere comfortable.
You sit on the edge of the bed.
This morning you woke up without even knowing which House you would belong to.
Now Emberfall is written across your robes, your room and the next four years of your life.
It still hasn't completely sunk in.
After a few quiet minutes, you rise again.
There is an entire academy outside your door.
And for the first time since arriving, nobody is immediately telling you where you need to be.
[[Continue|First Hexmoor Free Time]]<<set $returnPassage = passage()>>
Lucian leads the Nightbloom first-years away from the Grand Assembly Hall and into a quieter part of the academy.
The corridors here narrow slightly.
Tall windows give way to alcoves filled with old portraits, locked cabinets, and shelves containing objects you can't immediately identify.
Violet lamps glow at intervals along the walls.
Lucian walks at an easy pace.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom occupies the northern side of Hexmoor.<br> We're close to several of the older libraries, archive rooms and research spaces. </div></div>
That gets the attention of several students immediately.
Alexis glances toward one particularly old-looking doorway as you pass.
Lucian notices.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Before anyone asks, no, being Nightbloom does not automatically give you access to everything behind a locked door. </div></div>
He pauses.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It does, however, make you considerably more likely to wonder what's behind it. </div></div>
A few students laugh.
The further you go, the older this part of Hexmoor seems.
Some of the stone is darker.
More worn.
Small carved symbols appear around certain archways, many of them too faded for you to make out clearly.
Alexis leans closer.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I think I'm starting to understand why Elliot said Nightbloom students get distracted easily. </div></div>
Her eyes are still fixed on the carvings.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I've already got about six questions. </div></div>
Lucian speaks without looking back.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Only six?<br> We'll work on that. </div></div>
Alexis looks at you.
Then laughs.
The group continues deeper into the northern wing.
[[Continue|Nightbloom Residence Walk Two]]<<set $returnPassage = passage()>>
The corridors grow quieter as Lucian leads you farther into the northern wing.
Violet lamps cast soft pools of light across the stone.
Here and there, narrow staircases disappear upward between bookshelves and old archways.
Lucian glances back at the group.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Nightbloom has a reputation for curiosity.<br> That's deserved. </div></div>
He gives a small shrug.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Just remember that curiosity and good judgement are supposed to exist at the same time. </div></div>
A few students exchange looks.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If something is sealed, restricted or clearly labelled dangerous, try asking why before deciding the academy is challenging you personally. </div></div>
Alexis murmurs beside you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That sounds very specific. </div></div>
Lucian hears her.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> It is. </div></div>
That gets another laugh.
The corridor bends sharply.
Ahead, the stone gives way to dark wood and tall arched windows filled with deep violet glass.
A large door sits beneath a carved Nightbloom crest, framed by twisting silver patterns that shift slightly when you look away.
Lucian stops in front of it.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is us. </div></div>
He rests a hand against the door.
The silver patterns briefly glow.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome to Nightbloom. </div></div>
[[Continue|Nightbloom Residence]]<<set $returnPassage = passage()>>
Lucian pushes open the door.
The Nightbloom residence is quieter than the corridors outside, but far from empty.
The common room stretches across two levels, with dark wooden balconies overlooking the space below.
Tall bookshelves cover much of the walls.
Some are packed with ordinary books.
Others hold strange objects, sealed boxes, glass jars and magical curios that look as though nobody has bothered explaining why they're there.
Deep violet lamps hang from the ceiling, casting a soft glow across clusters of sofas and study tables.
Several older students are already scattered around the room.
One is reading beside the fire.
Another is surrounded by floating notes.
Two more are quietly arguing over something written in the margins of an enormous book.
Alexis slowly turns in place beside you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Oh, I like this. </div></div>
Lucian looks faintly amused.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Most of us do.<br> That's generally why we don't leave. </div></div>
He gestures toward the room.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Common room here.<br> Study spaces upstairs and through the eastern arch.<br> Bedrooms are along the upper corridors. </div></div>
His attention moves toward a narrow doorway partly hidden between two bookshelves.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> And before curiosity gets the better of anyone, not every door in this residence leads somewhere first-years are supposed to go. </div></div>
Several people immediately look at the doorway.
Lucian sighs.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> I realise pointing that out may have been a mistake. </div></div>
Alexis smiles beside you.
Lucian turns toward the staircase.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Come on.<br> Let's find your rooms before somebody proves my point. </div></div>
[[Continue|Nightbloom Bedroom]]<<set $returnPassage = passage()>>
Lucian leads the first-years up the staircase and along one of the upper corridors.
The noise of the common room fades behind you.
Here, the violet lighting is softer.
Dark wooden doors line the corridor, each marked with a small silver plaque.
Names have already appeared across them.
Students begin peeling away as they find their rooms.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bedrooms are private.<br> Bathrooms are shared at the end of each corridor. </div></div>
He gestures toward the doors.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Your room is your space.<br> Try not to turn it into an unsupervised research project during your first week. </div></div>
Alexis looks toward you.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> He keeps saying things like that as if people have definitely done them before. </div></div>
Lucian continues walking.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> People have definitely done them before. </div></div>
A few students laugh.
Further along the corridor, you spot your own name.
**<<print $name>>**
The silver plaque sits neatly against the dark wood.
Alexis stops only a couple of doors farther down.
<div class="dialogueBox"> <div class="speakerName">Alexis Vale</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Looks like we're practically neighbours. </div></div>
She gives you a small grin before turning toward her own room.
Lucian continues with the remaining students.
<div class="dialogueBox"> <div class="speakerName">Lucian Wren</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Get settled.<br> I'll be downstairs if anyone needs anything. </div></div>
You open your door.
The room beyond is simple, comfortable and slightly darker than the one you were given on arrival.
A single bed sits beneath a tall window.
There is a wooden desk, wardrobe, several shelves and a small chest at the foot of the bed.
Deep violet detailing runs through the curtains and bedding.
Your belongings are already waiting for you.
<<print $petName>> moves inside ahead of you and immediately begins exploring.
You step in after them.
Nightbloom is starting to feel a little less like a name on your robes.
And a little more like somewhere you belong.
[[Continue|Nightbloom Settling In]]<<set $returnPassage = passage()>>
You close the door behind you.
The noise from the corridor becomes little more than a distant murmur.
For the first time all morning, you are properly alone with <<print $petName>>.
You begin arranging a few of your belongings.
The violet detailing around the room feels different now that the same colour runs permanently through your robes.
Somewhere nearby, a door closes.
You hear Alexis laughing faintly from farther along the corridor before everything quiets again.
<<print $petName>> eventually finds somewhere comfortable to settle.
You sit on the edge of the bed.
The Reflection still lingers in your thoughts.
The founder.
The questions.
The answer you gave.
And now Nightbloom.
This morning the House was nothing more than a name.
Now it's where you live.
After a few quiet minutes, you stand again.
Somewhere beyond your room are libraries, hidden doors, strange old corridors and far more of Hexmoor than you've seen yet.
For once, nobody is waiting to guide you through it.
[[Continue|First Hexmoor Free Time]]<<set $returnPassage = passage()>>
Helena leads the Skyreach first-years away from the Grand Assembly Hall and into the eastern side of the academy.
The corridors gradually become brighter.
Tall windows stretch almost from floor to ceiling, filling the stone passageways with natural light.
Pale cyan lamps hang between them, while narrow metallic lines run through sections of the walls like decorative inlay.
Helena keeps an efficient pace at the front.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach occupies much of the eastern wing.<br> We're closest to several lecture halls, advanced spellcraft rooms and some of Hexmoor's larger study spaces. </div></div>
You pass an open doorway revealing a circular chamber filled with desks arranged around a floating diagram of slowly rotating magical symbols.
Several first-years look inside.
Helena notices.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Arcane Theory hall.<br> You'll become considerably more familiar with it than you currently want to be. </div></div>
A few students laugh.
The group continues up a broad staircase.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> The easiest way to recognise this side of Hexmoor is the silver inlay.<br> Follow it east and you'll usually end up somewhere useful. </div></div>
You glance down.
Thin silver lines run along the edges of the floor, periodically forming geometric patterns around doors and intersections.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Usually. </div></div>
[[Continue|Skyreach Residence Walk Two]]<<set $returnPassage = passage()>>
The eastern corridors become quieter as the group continues.
More Skyreach students appear here.
Some carry books or neatly organised bundles of parchment.
Others stand beside chalkboards covered in magical diagrams, arguing over calculations you can't begin to follow.
Helena glances back at the first-years.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach has a reputation for academic excellence.<br> That reputation is useful. It can also become irritating. </div></div>
A few students look surprised by the admission.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You do not need to be the cleverest person in every room.<br> You do need to be willing to improve when you aren't. </div></div>
She steps around two older students who have managed to block half the corridor with floating pieces of parchment.
One hurriedly moves them aside.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Precision matters here.<br> So does preparation.<br> Neither of those means spending three hours perfecting something that needed to be finished in one. </div></div>
One of the first-years quietly closes the notebook they had been writing in.
Helena notices.
She says nothing.
The faintest hint of amusement touches her expression.
Ahead, the corridor opens beneath a high stone arch.
Beyond it stands a pair of pale wooden doors decorated with silver geometric patterns and a central Skyreach crest.
Cyan light glows softly through the carvings.
Helena stops before them.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Here we are. </div></div>
She places one hand against the door.
The silver patterns illuminate beneath her fingers.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome to Skyreach. </div></div>
[[Continue|Skyreach Residence]]<<set $returnPassage = passage()>>
The doors open onto a vast, bright common room.
Tall arched windows dominate the far wall, overlooking the academy grounds from high above.
Natural light fills the room even beneath Hexmoor's grey northern sky.
Pale stone and dark wood are broken up by clean cyan detailing.
Bookshelves line several walls, but unlike Nightbloom's crowded collections, everything here is carefully ordered.
Long study tables sit beneath floating lamps.
Smaller seating areas surround a central fireplace where several older students are talking quietly.
Near one wall, a complicated model of glowing spheres rotates slowly above a table while two students adjust its movements with their wands.
Helena steps aside to let everyone enter.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Skyreach common room.<br> You're free to use it whenever you aren't expected somewhere else. </div></div>
She gestures toward a broad staircase leading upward.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bedrooms are upstairs.<br> Study rooms are through the western doors, and there are smaller workspaces on the second level. </div></div>
Her attention shifts toward another doorway.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> There is also a practice chamber.<br> It is for controlled practice, not proving that a spell can technically be made three times more powerful. </div></div>
A couple of older students glance over.
One looks suspiciously guilty.
Helena doesn't acknowledge them.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Keep shared spaces usable.<br> Return anything you borrow.<br> And if you alter one of the communal enchantments, tell someone before we discover it ourselves. </div></div>
She looks around the first-years.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You'll find we're fairly relaxed when people act like adults. </div></div>
Her expression becomes noticeably drier.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That arrangement becomes less relaxed remarkably quickly when they don't. </div></div>
A few people smile.
Helena turns toward the staircase.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Rooms next. Follow me. </div></div>
[[Continue|Skyreach Bedroom]]<<set $returnPassage = passage()>>
The upper levels are noticeably quieter.
Helena leads the group along a wide corridor lined with pale wooden doors.
Small silver plaques are fixed beside each one.
Names have already appeared across them.
One by one, students leave the group as they find their rooms.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bedrooms are private.<br> Bathrooms are shared at the end of each corridor. </div></div>
She points toward a set of doors farther ahead.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> You're free to personalise your room.<br> Permanent magical alterations require permission. </div></div>
A student near the back raises a hand.
Helena looks at them.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> If you're wondering whether your idea counts as permanent, ask before doing it. </div></div>
The hand slowly lowers.
Further down the corridor, you find your own name.
**<<print $name>>**
The silver plaque catches the cyan light from the walls.
Helena notices you stop.
<div class="dialogueBox"> <div class="speakerName">Helena Ward</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's yours.<br> Get yourself settled. I'll be downstairs if you need anything. </div></div>
She continues with the remaining first-years.
You open the door.
The room beyond is bright and orderly.
A single bed rests beneath a tall window overlooking part of Hexmoor's grounds.
A wooden desk sits opposite it, accompanied by several shelves, a wardrobe and a small chest.
Subtle cyan detailing runs through the curtains and bedding.
Your belongings are already waiting.
<<print $petName>> enters ahead of you and immediately begins inspecting the unfamiliar room.
You follow.
Compared with the temporary room you woke in this morning, this feels different.
This isn't simply somewhere Hexmoor has put you.
It's your room.
In Skyreach.
[[Continue|Skyreach Settling In]]<<set $returnPassage = passage()>>
You close the door.
The quiet of the room settles around you.
<<print $petName>> continues investigating while you begin putting away a few of your belongings.
The pale cyan detailing around the room catches the daylight from the window.
It matches the seams of your robes perfectly.
Beyond the glass, part of Hexmoor stretches away below.
Towers.
Courtyards.
Walkways.
More rooms than you could possibly hope to recognise after a single morning.
You sit briefly at the edge of the bed.
Skyreach.
The name feels more real here than it did when Professor Voss announced it in front of the entire Assembly Hall.
You think back to the Reflection.
To Cassian.
To the choice that brought you here.
<<print $petName>> eventually settles.
After a few minutes, you stand.
There is plenty you still don't understand about Hexmoor.
For the first time today, you have the freedom to start deciding what to do about that yourself.
[[Continue|First Hexmoor Free Time]]<<set $returnPassage = passage()>>
Jonah leads the Mossgren first-years away from the Grand Assembly Hall and toward the southern side of Hexmoor.
The corridors gradually become quieter.
Tall windows overlook gardens, courtyards and stretches of academy grounds.
Green lamps sit between the windows, their light softer than the brighter magical fixtures elsewhere.
Jonah walks at an easy pace.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren's on the southern side of the academy.<br> We're closest to the gardens, creature grounds and several of the practical outdoor spaces. </div></div>
Beyond one window, you catch sight of a broad greenhouse roof surrounded by carefully maintained paths.
Farther away, something large moves behind a fence.
You can't make out what.
Jonah notices several people looking.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Creature grounds.<br> You'll get there soon enough. </div></div>
He gives the group a quick look.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Until then, if something has more teeth than you expected, don't assume it wants to make friends. </div></div>
That gets a few nervous laughs.
The corridor turns.
You begin noticing small carved leaves and root patterns worked into the stone around doorways.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Follow the green lamps and the carved roots if you're trying to get back.<br> Usually works. </div></div>
[[Continue|Mossgren Residence Walk Two]]<<set $returnPassage = passage()>>
The southern wing feels more open the farther you go.
Several corridors lead directly toward small courtyards and covered walkways.
Mossgren students pass in both directions.
Some carry books.
Others have gardening gloves, creature-handling equipment or baskets filled with things you don't recognise.
Jonah looks back at the first-years.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Mossgren gets called the sensible House quite a lot. </div></div>
A few students smile.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Sometimes that's a compliment.<br> Sometimes it's what people say when they want us to clean up whatever they've just done. </div></div>
That gets a louder laugh.
Jonah shrugs.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Look after the people around you.<br> Do your share.<br> Don't create work for everyone else because you couldn't be bothered thinking first. </div></div>
His tone remains easygoing, but there is more weight behind the words.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's most of what I ask. </div></div>
The corridor opens into a warmer section of the academy.
Dark wood replaces much of the bare stone.
Greenery grows along several beams and around the windows without looking remotely accidental.
Ahead stands a wide wooden door bearing the Mossgren crest.
Jonah stops before it.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Here we are. </div></div>
He rests a hand against the door.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Welcome to Mossgren. </div></div>
[[Continue|Mossgren Residence]]<<set $returnPassage = passage()>>
Jonah pushes open the doors.
Warm light spills across the corridor.
The Mossgren common room stretches out beyond them, broad and comfortable rather than grand.
Heavy wooden beams cross the ceiling.
Large windows look out over Hexmoor's gardens and the wooded grounds beyond.
Plants grow from shelves, hang from beams and curl around parts of the stonework.
Some are ordinary.
Others move slightly despite the complete lack of wind.
Deep green sofas and mismatched armchairs gather around a wide fireplace.
Long wooden tables fill another part of the room, some covered in books and parchment, others occupied by students eating, talking or working together.
It feels busy without being loud.
Lived in.
Jonah steps aside.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> This is the common room.<br> Use it, don't destroy it, and try not to leave anything growing somewhere it shouldn't. </div></div>
He glances toward a vine slowly crawling along one of the beams.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That includes accidentally. </div></div>
A couple of older students laugh.
Jonah gestures toward several archways.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Study rooms are through there.<br> Small practice space on the ground floor.<br> Bedrooms are upstairs. </div></div>
He points toward another door leading outside.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> We've also got direct access to a small House courtyard.<br> You're free to use it whenever the academy grounds are open. </div></div>
Several first-years immediately look interested.
Jonah turns toward the staircase.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Rooms next.<br> Then I'll leave you alone for a while. </div></div>
[[Continue|Mossgren Bedroom]]<<set $returnPassage = passage()>>
Jonah leads the group upstairs.
The upper corridor is quieter, lined with dark wooden doors and small brass plaques.
Soft green lamps glow between them.
Names have already appeared across each plaque.
Students begin breaking away as they find their rooms.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Bedrooms are private.<br> Bathrooms are shared at the end of the corridor. </div></div>
He gestures toward the doors.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> Make your room your own.<br> Just remember somebody eventually has to repair anything you decide to permanently alter. </div></div>
You continue until your own name catches your eye.
**<<print $name>>**
The brass plaque is fixed neatly beside one of the doors.
Jonah notices you stop.
<div class="dialogueBox"> <div class="speakerName">Jonah Reed</div> <div class="dialogueDivider"></div> <div class="dialogueText"> That's you.<br> Get settled. I'll be downstairs if you need anything. </div></div>
He continues with the remaining students.
You open the door.
The room beyond is simple and comfortable.
A single bed sits beneath a broad window overlooking part of the grounds.
There is a wooden desk, wardrobe, several shelves and a small chest at the foot of the bed.
Deep green detailing runs through the curtains and bedding.
A small potted plant sits on the windowsill.
Your belongings are already waiting.
<<print $petName>> moves inside ahead of you and immediately begins investigating.
You follow.
For the first time since arriving at Hexmoor, the room doesn't feel temporary.
This is yours.
In Mossgren.
[[Continue|Mossgren Settling In]]<<set $returnPassage = passage()>>
You close the door behind you.
The room becomes comfortably quiet.
<<print $petName>> continues exploring while you start arranging a few of your belongings.
Outside the window, part of Hexmoor's grounds stretches away beneath the grey northern sky.
Gardens.
Trees.
The distant roofs of the greenhouses.
The deep green details around your room now match the permanent colour running through your robes.
You sit on the edge of the bed.
Mossgren.
A few hours ago it was only one of four names you barely understood.
Now it's your House.
Your residence.
Your home for the next four years.
The founder's words still sit quietly in the back of your mind.
Eventually, <<print $petName>> finds somewhere comfortable and settles down.
You stay there for another moment before getting back to your feet.
There is no prefect waiting outside.
No professor calling your name.
For the first time since arriving at Hexmoor, what happens next is largely up to you.
[[Continue|First Hexmoor Free Time]]<<set $returnPassage = passage()>>
For the first time since arriving at Hexmoor, there is nowhere you are expected to be.
No ceremony.
No professor waiting.
No schedule pulling you somewhere else.
Just an unfamiliar academy beyond your door and four years of magic ahead of you.
Your first real day at Hexmoor has only just begun.
---
End of v0.03
Thank you for playing!
If you enjoyed this update and would like to support the continued development of Hexmoor Academy, you can support the project on Patreon:
<a href="https://www.patreon.com/cw/opsmaser" target="_blank">Support Hexmoor Academy on Patreon</a>